submaster: improve avg frequency calculation for efficiency (#33516)

improve avg freq calculation for efficiency
pull/33675/head
Dean Lee 7 months ago committed by GitHub
parent f99d81d0fa
commit 3c456f5b8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 21
      cereal/messaging/__init__.py

@ -109,12 +109,26 @@ class FrequencyTracker:
self.min_freq = min_freq * 0.8 self.min_freq = min_freq * 0.8
self.max_freq = max_freq * 1.2 self.max_freq = max_freq * 1.2
self.recv_dts: Deque[float] = deque(maxlen=int(10 * freq)) self.recv_dts: Deque[float] = deque(maxlen=int(10 * freq))
self.recv_dts_sum = 0.0
self.recent_recv_dts: Deque[float] = deque(maxlen=int(freq))
self.recent_recv_dts_sum = 0.0
self.prev_time = 0.0 self.prev_time = 0.0
def record_recv_time(self, cur_time: float) -> None: def record_recv_time(self, cur_time: float) -> None:
# TODO: Handle case where cur_time is less than prev_time # TODO: Handle case where cur_time is less than prev_time
if self.prev_time > 1e-5: if self.prev_time > 1e-5:
self.recv_dts.append(cur_time - self.prev_time) dt = cur_time - self.prev_time
if len(self.recv_dts) == self.recv_dts.maxlen:
self.recv_dts_sum -= self.recv_dts[0]
self.recv_dts.append(dt)
self.recv_dts_sum += dt
if len(self.recent_recv_dts) == self.recent_recv_dts.maxlen:
self.recent_recv_dts_sum -= self.recent_recv_dts[0]
self.recent_recv_dts.append(dt)
self.recent_recv_dts_sum += dt
self.prev_time = cur_time self.prev_time = cur_time
@property @property
@ -122,12 +136,11 @@ class FrequencyTracker:
if not self.recv_dts: if not self.recv_dts:
return False return False
avg_freq = len(self.recv_dts) / sum(self.recv_dts) avg_freq = len(self.recv_dts) / self.recv_dts_sum
if self.min_freq <= avg_freq <= self.max_freq: if self.min_freq <= avg_freq <= self.max_freq:
return True return True
recent_dts = list(self.recv_dts)[-int(self.recv_dts.maxlen / 10):] avg_freq_recent = len(self.recent_recv_dts) / self.recent_recv_dts_sum
avg_freq_recent = len(recent_dts) / sum(recent_dts)
return self.min_freq <= avg_freq_recent <= self.max_freq return self.min_freq <= avg_freq_recent <= self.max_freq

Loading…
Cancel
Save