From d5796e07e2a08141bae97de2d76bfd20ce199aad Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 10 Oct 2020 15:17:02 -0700 Subject: [PATCH] more accurate profiling (#2287) --- selfdrive/test/profiling/lib.py | 41 +++++++++++---------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/selfdrive/test/profiling/lib.py b/selfdrive/test/profiling/lib.py index 1694e12aca..624231f746 100644 --- a/selfdrive/test/profiling/lib.py +++ b/selfdrive/test/profiling/lib.py @@ -29,18 +29,12 @@ class SubSocket(): class PubSocket(): def send(self, data): - if not isinstance(data, bytes): - data = data.to_bytes() + pass class SubMaster(messaging.SubMaster): def __init__(self, msgs, trigger, services): # pylint: disable=super-init-not-called - msgs = [m for m in msgs if m.which() in services] - self.max_i = len(msgs) - 1 - self.i = 0 self.frame = 0 - self.trigger = trigger - self.msgs = msgs self.data = {} self.ignore_alive = [] @@ -52,6 +46,16 @@ class SubMaster(messaging.SubMaster): self.logMonoTime = {} self.sock = {} + # TODO: specify multiple triggers for service like plannerd that poll on more than one service + cur_msgs = [] + self.msgs = [] + msgs = [m for m in msgs if m.which() in services] + for msg in msgs: + cur_msgs.append(msg) + if msg.which() == trigger: + self.msgs.append(cur_msgs) + cur_msgs = [] + for s in services: try: data = messaging.new_message(s) @@ -64,28 +68,11 @@ class SubMaster(messaging.SubMaster): self.sock[s] = SubSocket(msgs, s) def update(self, timeout=None): - if self.i == self.max_i: + if not len(self.msgs): raise ReplayDone - self.updated = dict.fromkeys(self.updated, False) - self.frame += 1 - - while True: - msg = self.msgs[self.i] - w = msg.which() - - self.updated[w] = True - self.rcv_time[w] = msg.logMonoTime / 1e9 - self.rcv_frame[w] = self.frame - self.data[w] = getattr(msg, w) - self.logMonoTime[w] = msg.logMonoTime - - self.i += 1 - if self.i == self.max_i: - raise ReplayDone - - if w == self.trigger: - break + cur_msgs = self.msgs.pop() + self.update_msgs(cur_msgs[0].logMonoTime, self.msgs.pop()) class PubMaster(messaging.PubMaster):