diff --git a/steamcache/avgcachestate/avgcachestate.go b/steamcache/avgcachestate/avgcachestate.go index 09949b1..8d16237 100644 --- a/steamcache/avgcachestate/avgcachestate.go +++ b/steamcache/avgcachestate/avgcachestate.go @@ -7,9 +7,11 @@ import ( // AvgCacheState is a cache state that averages the last N cache states. type AvgCacheState struct { - size int - avgs []cachestate.CacheState - mu sync.Mutex + size int + hits int + misses int + avgs []cachestate.CacheState + mu sync.Mutex } // New creates a new average cache state with the given size. @@ -42,8 +44,21 @@ func (a *AvgCacheState) Add(cs cachestate.CacheState) { a.avgs = append(a.avgs, cs) if len(a.avgs) > a.size { + switch a.avgs[0] { + case cachestate.CacheStateHit: + a.hits-- + case cachestate.CacheStateMiss: + a.misses-- + } a.avgs = a.avgs[1:] } + + switch cs { + case cachestate.CacheStateHit: + a.hits++ + case cachestate.CacheStateMiss: + a.misses++ + } } // Avg returns the average cache state. @@ -51,13 +66,5 @@ func (a *AvgCacheState) Avg() float64 { a.mu.Lock() defer a.mu.Unlock() - var hits int - for _, cs := range a.avgs { - switch cs { - case cachestate.CacheStateHit: - hits++ - } - } - - return float64(hits) / float64(len(a.avgs)) + return float64(a.hits) / (float64(a.misses) + 0.0000001) }