fix: change tape error

This commit is contained in:
Samuel N Cui
2022-12-13 17:00:04 +08:00
parent f87ec06af6
commit 8ccecd8017
26 changed files with 501 additions and 273 deletions

View File

@@ -1,8 +1,55 @@
package executor
import (
"sync/atomic"
"time"
)
const SpeedLen = 30
type speedEvent struct {
bytes int64
time time.Time
}
type progress struct {
speed int64
speedEvents []speedEvent
speedLen int
speedIdx int
startTime time.Time
speed int64
totalBytes, totalFiles int64
bytes, files int64
}
func newProgress() *progress {
return &progress{speedEvents: make([]speedEvent, SpeedLen), speedLen: SpeedLen, startTime: time.Now()}
}
func (p *progress) setBytes(bytes int64) {
atomic.StoreInt64(&p.bytes, bytes)
now := time.Now()
p.speedEvents[p.speedIdx] = speedEvent{bytes: bytes, time: now}
for earliest := p.speedIdx; ; {
earliest++
if earliest >= p.speedLen {
earliest = 0
}
if earliest == p.speedIdx {
break
}
if !p.speedEvents[earliest].time.IsZero() {
p.speed = (bytes - p.speedEvents[earliest].bytes) * 1e9 / now.Sub(p.speedEvents[earliest].time).Nanoseconds()
break
}
}
p.speedIdx++
if p.speedIdx >= p.speedLen {
p.speedIdx = 0
}
}