Source code for director.simpletimer

import time


[docs]class SimpleTimer(object): def __init__(self): self.reset()
[docs] def now(self): return time.time()
[docs] def elapsed(self): return self.now() - self.t0
[docs] def reset(self): self.t0 = self.now()
[docs]class FPSCounter(object): def __init__(self): self.averageComputer = MovingAverageComputer() self.printToConsole = False
[docs] def tick(self): newAverage = self.averageComputer.timer.elapsed() > self.averageComputer.timeWindow self.averageComputer.update(1) if newAverage and self.printToConsole: print 'fps:', self.getAverageFPS()
[docs] def getAverageFPS(self): return self.averageComputer.getAverage()
[docs]class AverageComputer(object): def __init__(self): self.timer = SimpleTimer() self.quantity = 0.0
[docs] def update(self, quantitySinceLastUpdate): self.quantity += quantitySinceLastUpdate
[docs] def getAverage(self): return self.quantity / self.timer.elapsed()
[docs] def reset(self): self.quantity = 0.0 self.timer.reset()
[docs]class MovingAverageComputer(object): def __init__(self): self.timer = SimpleTimer() self.alpha = 0.9 self.timeWindow = 1.0 self.average = 0.0 self.quantityThisWindow = 0.0
[docs] def update(self, quantitySinceLastUpdate): self.quantityThisWindow += quantitySinceLastUpdate self._updateAverage()
[docs] def getAverage(self): self._updateAverage() return self.average
def _updateAverage(self): elapsedTime = self.timer.elapsed() if elapsedTime > self.timeWindow: # compute FPS for this time window averageThisWindow = self.quantityThisWindow / elapsedTime # update moving average self.average = self.alpha * averageThisWindow + (1.0 - self.alpha) * self.average # reset self.timer.reset() self.quantityThisWindow = 0.0