improve profiling

This commit is contained in:
Vladimir Mandic
2024-09-23 11:07:24 -04:00
parent ddefb38030
commit 92f2a2902f
14 changed files with 128 additions and 77 deletions
+14 -6
View File
@@ -1,4 +1,5 @@
import time
import sys
class Timer:
@@ -7,29 +8,36 @@ class Timer:
self.records = {}
self.total = 0
def elapsed(self):
def elapsed(self, reset=True):
end = time.time()
res = end - self.start
self.start = end
if reset:
self.start = end
return res
def record(self, category, extra_time=0):
e = self.elapsed()
def record(self, category=None, extra_time=0, reset=True):
e = self.elapsed(reset)
if category is None:
category = sys._getframe(1).f_code.co_name # pylint: disable=protected-access
if category not in self.records:
self.records[category] = 0
self.records[category] += e + extra_time
self.total += e + extra_time
def summary(self, min_time=0.05):
res = f"{self.total:.2f} "
def summary(self, min_time=0.05, total=True):
res = f"{self.total:.2f} " if total else ''
additions = [x for x in self.records.items() if x[1] >= min_time]
if not additions:
return res
res += " ".join([f"{category}={time_taken:.2f}" for category, time_taken in additions])
return res
def dct(self, min_time=0.05):
return {k: round(v, 2) for k, v in self.records.items() if v >= min_time}
def reset(self):
self.__init__()
startup = Timer()
process = Timer()