Files
dragonpilot/common/profiler.py

47 lines
1.3 KiB
Python
Raw Normal View History

2017-12-23 17:15:27 -08:00
import time
2017-01-09 20:59:00 -08:00
2019-10-09 18:43:53 +00:00
class Profiler():
2017-01-09 20:59:00 -08:00
def __init__(self, enabled=False):
self.enabled = enabled
2017-12-23 17:15:27 -08:00
self.cp = {}
self.cp_ignored = []
self.iter = 0
2018-03-17 00:01:50 -07:00
self.start_time = time.time()
2017-01-09 20:59:00 -08:00
self.last_time = self.start_time
2017-12-23 17:15:27 -08:00
self.tot = 0.
2017-01-09 20:59:00 -08:00
2017-09-30 03:07:27 -07:00
def reset(self, enabled=False):
self.enabled = enabled
2017-12-23 17:15:27 -08:00
self.cp = {}
self.cp_ignored = []
self.iter = 0
2018-03-17 00:01:50 -07:00
self.start_time = time.time()
2017-09-30 03:07:27 -07:00
self.last_time = self.start_time
2017-12-23 17:15:27 -08:00
def checkpoint(self, name, ignore=False):
# ignore flag needed when benchmarking threads with ratekeeper
if not self.enabled:
return
2018-03-17 00:01:50 -07:00
tt = time.time()
2017-12-23 17:15:27 -08:00
if name not in self.cp:
self.cp[name] = 0.
if ignore:
self.cp_ignored.append(name)
self.cp[name] += tt - self.last_time
if not ignore:
self.tot += tt - self.last_time
self.last_time = tt
2017-01-09 20:59:00 -08:00
def display(self):
if not self.enabled:
return
2017-12-23 17:15:27 -08:00
self.iter += 1
2018-07-12 18:52:06 -07:00
print("******* Profiling *******")
2018-03-17 00:01:50 -07:00
for n, ms in sorted(self.cp.items(), key=lambda x: -x[1]):
2017-12-23 17:15:27 -08:00
if n in self.cp_ignored:
2018-07-12 18:52:06 -07:00
print("%30s: %7.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms/self.tot*100))
2017-12-23 17:15:27 -08:00
else:
2018-07-12 18:52:06 -07:00
print("%30s: %7.2f percent: %3.0f" % (n, ms*1000.0, ms/self.tot*100))
print("Iter clock: %2.6f TOTAL: %2.2f" % (self.tot/self.iter, self.tot))
2017-01-09 20:59:00 -08:00