SickGear/lib/hachoir/subfile/data_rate.py

40 lines
1.2 KiB
Python
Raw Normal View History

from time import time
DATARATE_UPDATE = 1.0 # Time slice (in second) for datarate computation
class DataRate:
"""
Compute average speed in bits per second of a function.
Store self.size data rates to compute good average speed.
Don't compute average before self.min_size values are computed.
"""
def __init__(self, offset, size=20, min_size=3):
self.last_offset = offset
self.last_time = time()
self.datarates = []
# Average bit rate
self.average = None
# Number of stored value used to compute average data rate
self.size = size
self.min_size = min_size
def update(self, offset):
# Compute time delta
difftime = time() - self.last_time
if difftime < DATARATE_UPDATE:
# Only update each second
return
self.last_time = time()
# Compute data rate
rate = float(offset - self.last_offset) / difftime
self.last_offset = offset
# Update statistics
self.datarates.append(rate)
self.datarates = self.datarates[-self.size:]
if self.min_size <= len(self.datarates):
self.average = sum(self.datarates) / len(self.datarates)