mirror of https://github.com/commaai/openpilot.git
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import time
|
|
|
|
class Profiler():
|
|
def __init__(self, enabled=False):
|
|
self.enabled = enabled
|
|
self.cp = {}
|
|
self.cp_ignored = []
|
|
self.iter = 0
|
|
self.start_time = time.time()
|
|
self.last_time = self.start_time
|
|
self.tot = 0.
|
|
|
|
def reset(self, enabled=False):
|
|
self.enabled = enabled
|
|
self.cp = {}
|
|
self.cp_ignored = []
|
|
self.iter = 0
|
|
self.start_time = time.time()
|
|
self.last_time = self.start_time
|
|
|
|
def checkpoint(self, name, ignore=False):
|
|
# ignore flag needed when benchmarking threads with ratekeeper
|
|
if not self.enabled:
|
|
return
|
|
tt = time.time()
|
|
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
|
|
|
|
def display(self):
|
|
if not self.enabled:
|
|
return
|
|
self.iter += 1
|
|
print("******* Profiling %d *******" % self.iter)
|
|
for n, ms in sorted(self.cp.items(), key=lambda x: -x[1]):
|
|
if n in self.cp_ignored:
|
|
print("%30s: %9.2f avg: %7.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100))
|
|
else:
|
|
print("%30s: %9.2f avg: %7.2f percent: %3.0f" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100))
|
|
print(f"Iter clock: {self.tot / self.iter:2.6f} TOTAL: {self.tot:2.2f}")
|