| 16 | |
| 17 | |
| 18 | class CallbackTimeLogger(object): |
| 19 | def __init__(self): |
| 20 | self.times = [] |
| 21 | self.tot = 0 |
| 22 | |
| 23 | def add(self, name, time): |
| 24 | self.tot += time |
| 25 | self.times.append((name, time)) |
| 26 | |
| 27 | @contextmanager |
| 28 | def timed_callback(self, name): |
| 29 | s = timer() |
| 30 | yield |
| 31 | self.add(name, timer() - s) |
| 32 | |
| 33 | def log(self): |
| 34 | |
| 35 | """ log the time of some heavy callbacks """ |
| 36 | if self.tot < 2: |
| 37 | return |
| 38 | msgs = [] |
| 39 | for name, t in self.times: |
| 40 | if t / self.tot > 0.3 and t > 1: |
| 41 | msgs.append(name + ": " + humanize_time_delta(t)) |
| 42 | logger.info( |
| 43 | "Callbacks took {:.3f} sec in total. {}".format( |
| 44 | self.tot, '; '.join(msgs))) |
| 45 | |
| 46 | |
| 47 | class Callbacks(Callback): |