mirror of https://github.com/openXC7/prjxray.git
74 lines
1.9 KiB
Python
74 lines
1.9 KiB
Python
'''
|
|
pr0ntools
|
|
Benchmarking utility
|
|
Copyright 2010 John McMaster
|
|
'''
|
|
|
|
import time
|
|
|
|
|
|
def time_str(delta):
|
|
fraction = delta % 1
|
|
delta -= fraction
|
|
delta = int(delta)
|
|
seconds = delta % 60
|
|
delta /= 60
|
|
minutes = delta % 60
|
|
delta /= 60
|
|
hours = delta
|
|
return '%02d:%02d:%02d.%04d' % (hours, minutes, seconds, fraction * 10000)
|
|
|
|
|
|
class Benchmark:
|
|
start_time = None
|
|
end_time = None
|
|
|
|
def __init__(self, max_items=None):
|
|
# For the lazy
|
|
self.start_time = time.time()
|
|
self.end_time = None
|
|
self.max_items = max_items
|
|
self.cur_items = 0
|
|
|
|
def start(self):
|
|
self.start_time = time.time()
|
|
self.end_time = None
|
|
self.cur_items = 0
|
|
|
|
def stop(self):
|
|
self.end_time = time.time()
|
|
|
|
def advance(self, n=1):
|
|
self.cur_items += n
|
|
|
|
def set_cur_items(self, n):
|
|
self.cur_items = n
|
|
|
|
def delta_s(self):
|
|
if self.end_time:
|
|
return self.end_time - self.start_time
|
|
else:
|
|
return time.time() - self.start_time
|
|
|
|
def __str__(self):
|
|
if self.end_time:
|
|
return time_str(self.end_time - self.start_time)
|
|
elif self.max_items:
|
|
cur_time = time.time()
|
|
delta_t = cur_time - self.start_time
|
|
rate_s = 'N/A'
|
|
if delta_t > 0.000001:
|
|
rate = self.cur_items / (delta_t)
|
|
rate_s = '%f items / sec' % rate
|
|
if rate == 0:
|
|
eta_str = 'inf'
|
|
else:
|
|
remaining = (self.max_items - self.cur_items) / rate
|
|
eta_str = time_str(remaining)
|
|
else:
|
|
eta_str = "indeterminate"
|
|
return '%d / %d, ETA: %s @ %s' % (
|
|
self.cur_items, self.max_items, eta_str, rate_s)
|
|
else:
|
|
return time_str(time.time() - self.start_time)
|