mirror of
https://github.com/safing/portmaster
synced 2025-04-23 04:19:10 +00:00
87 lines
3 KiB
Go
87 lines
3 KiB
Go
package unit
|
|
|
|
// Stats are somewhat racy, as one value of sum or count might already be
|
|
// updated with the latest slot data, while the other has been not.
|
|
// This is not so much of a problem, as slots are really short and the impact
|
|
// is very low.
|
|
|
|
// cycleStats calculates the new values and cycles the current values.
|
|
func (s *Scheduler) cycleStats() {
|
|
// Get and reset max pace.
|
|
s.stats.current.maxPace.Store(s.stats.progress.maxPace.Load())
|
|
s.stats.progress.maxPace.Store(0)
|
|
|
|
// Get and reset max leveled pace.
|
|
s.stats.current.maxLeveledPace.Store(s.stats.progress.maxLeveledPace.Load())
|
|
s.stats.progress.maxLeveledPace.Store(0)
|
|
|
|
// Get and reset avg slot pace.
|
|
avgPaceCnt := s.stats.progress.avgPaceCnt.Load()
|
|
if avgPaceCnt > 0 {
|
|
s.stats.current.avgPace.Store(s.stats.progress.avgPaceSum.Load() / avgPaceCnt)
|
|
} else {
|
|
s.stats.current.avgPace.Store(0)
|
|
}
|
|
s.stats.progress.avgPaceCnt.Store(0)
|
|
s.stats.progress.avgPaceSum.Store(0)
|
|
|
|
// Get and reset avg unit life.
|
|
avgUnitLifeCnt := s.stats.progress.avgUnitLifeCnt.Load()
|
|
if avgUnitLifeCnt > 0 {
|
|
s.stats.current.avgUnitLife.Store(s.stats.progress.avgUnitLifeSum.Load() / avgUnitLifeCnt)
|
|
} else {
|
|
s.stats.current.avgUnitLife.Store(0)
|
|
}
|
|
s.stats.progress.avgUnitLifeCnt.Store(0)
|
|
s.stats.progress.avgUnitLifeSum.Store(0)
|
|
|
|
// Get and reset avg work slot duration.
|
|
avgWorkSlotCnt := s.stats.progress.avgWorkSlotCnt.Load()
|
|
if avgWorkSlotCnt > 0 {
|
|
s.stats.current.avgWorkSlot.Store(s.stats.progress.avgWorkSlotSum.Load() / avgWorkSlotCnt)
|
|
} else {
|
|
s.stats.current.avgWorkSlot.Store(0)
|
|
}
|
|
s.stats.progress.avgWorkSlotCnt.Store(0)
|
|
s.stats.progress.avgWorkSlotSum.Store(0)
|
|
|
|
// Get and reset avg catch up slot duration.
|
|
avgCatchUpSlotCnt := s.stats.progress.avgCatchUpSlotCnt.Load()
|
|
if avgCatchUpSlotCnt > 0 {
|
|
s.stats.current.avgCatchUpSlot.Store(s.stats.progress.avgCatchUpSlotSum.Load() / avgCatchUpSlotCnt)
|
|
} else {
|
|
s.stats.current.avgCatchUpSlot.Store(0)
|
|
}
|
|
s.stats.progress.avgCatchUpSlotCnt.Store(0)
|
|
s.stats.progress.avgCatchUpSlotSum.Store(0)
|
|
}
|
|
|
|
// GetMaxSlotPace returns the current maximum slot pace.
|
|
func (s *Scheduler) GetMaxSlotPace() int64 {
|
|
return s.stats.current.maxPace.Load()
|
|
}
|
|
|
|
// GetMaxLeveledSlotPace returns the current maximum leveled slot pace.
|
|
func (s *Scheduler) GetMaxLeveledSlotPace() int64 {
|
|
return s.stats.current.maxLeveledPace.Load()
|
|
}
|
|
|
|
// GetAvgSlotPace returns the current average slot pace.
|
|
func (s *Scheduler) GetAvgSlotPace() int64 {
|
|
return s.stats.current.avgPace.Load()
|
|
}
|
|
|
|
// GetAvgUnitLife returns the current average unit lifetime until it is finished.
|
|
func (s *Scheduler) GetAvgUnitLife() int64 {
|
|
return s.stats.current.avgUnitLife.Load()
|
|
}
|
|
|
|
// GetAvgWorkSlotDuration returns the current average work slot duration.
|
|
func (s *Scheduler) GetAvgWorkSlotDuration() int64 {
|
|
return s.stats.current.avgWorkSlot.Load()
|
|
}
|
|
|
|
// GetAvgCatchUpSlotDuration returns the current average catch up slot duration.
|
|
func (s *Scheduler) GetAvgCatchUpSlotDuration() int64 {
|
|
return s.stats.current.avgCatchUpSlot.Load()
|
|
}
|