|  |  |  | #!/usr/bin/env python3
 | 
					
						
							|  |  |  | import sys
 | 
					
						
							|  |  |  | import time
 | 
					
						
							|  |  |  | import numpy as np
 | 
					
						
							|  |  |  | import datetime
 | 
					
						
							|  |  |  | from collections.abc import MutableSequence
 | 
					
						
							|  |  |  | from collections import defaultdict
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import cereal.messaging as messaging
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__":
 | 
					
						
							|  |  |  |   ts: defaultdict[str, MutableSequence[float]] = defaultdict(list)
 | 
					
						
							|  |  |  |   socks = {s: messaging.sub_sock(s, conflate=False) for s in sys.argv[1:]}
 | 
					
						
							|  |  |  |   try:
 | 
					
						
							|  |  |  |     st = time.monotonic()
 | 
					
						
							|  |  |  |     while True:
 | 
					
						
							|  |  |  |       print()
 | 
					
						
							|  |  |  |       for s, sock in socks.items():
 | 
					
						
							|  |  |  |         msgs = messaging.drain_sock(sock)
 | 
					
						
							|  |  |  |         for m in msgs:
 | 
					
						
							|  |  |  |           ts[s].append(m.logMonoTime / 1e6)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if len(ts[s]) > 2:
 | 
					
						
							|  |  |  |           d = np.diff(ts[s])[-100:]
 | 
					
						
							|  |  |  |           print(f"{s:25} {np.mean(d):7.2f} {np.std(d):7.2f} {np.max(d):7.2f} {np.min(d):7.2f}")
 | 
					
						
							|  |  |  |       time.sleep(1)
 | 
					
						
							|  |  |  |   except KeyboardInterrupt:
 | 
					
						
							|  |  |  |     print("\n")
 | 
					
						
							|  |  |  |     print("="*5, "timing summary", "="*5)
 | 
					
						
							|  |  |  |     for s, sock in socks.items():
 | 
					
						
							|  |  |  |       msgs = messaging.drain_sock(sock)
 | 
					
						
							|  |  |  |       if len(ts[s]) > 2:
 | 
					
						
							|  |  |  |         d = np.diff(ts[s])
 | 
					
						
							|  |  |  |         print(f"{s:25} {np.mean(d):7.2f} {np.std(d):7.2f} {np.max(d):7.2f} {np.min(d):7.2f}")
 | 
					
						
							|  |  |  |     print("="*5, datetime.timedelta(seconds=time.monotonic()-st), "="*5)
 |