| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -5,7 +5,6 @@ import time | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import unittest | 
					 | 
					 | 
					 | 
					import unittest | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from collections import defaultdict | 
					 | 
					 | 
					 | 
					from collections import defaultdict | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from parameterized import parameterized | 
					 | 
					 | 
					 | 
					from parameterized import parameterized | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from unittest import mock | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import threading | 
					 | 
					 | 
					 | 
					import threading | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from cereal import car | 
					 | 
					 | 
					 | 
					from cereal import car | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -177,7 +176,7 @@ class TestFwFingerprint(unittest.TestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class TestFwFingerprintTiming(unittest.TestCase): | 
					 | 
					 | 
					 | 
					class TestFwFingerprintTiming(unittest.TestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  N: int = 5 | 
					 | 
					 | 
					 | 
					  N: int = 5 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  TOL: float = 0.1 | 
					 | 
					 | 
					 | 
					  TOL: float = 0.12 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  @staticmethod | 
					 | 
					 | 
					 | 
					  @staticmethod | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def _run_thread(thread: threading.Thread) -> float: | 
					 | 
					 | 
					 | 
					  def _run_thread(thread: threading.Thread) -> float: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -192,19 +191,12 @@ class TestFwFingerprintTiming(unittest.TestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return time.perf_counter() - t | 
					 | 
					 | 
					 | 
					    return time.perf_counter() - t | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def _benchmark_brand(self, brand, num_pandas): | 
					 | 
					 | 
					 | 
					  def _benchmark_brand(self, brand, num_pandas): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    def fake_get_data(_, timeout): | 
					 | 
					 | 
					 | 
					    fake_socket = FakeSocket() | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      nonlocal fake_timeout_time | 
					 | 
					 | 
					 | 
					    brand_time = 0 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      fake_timeout_time += timeout | 
					 | 
					 | 
					 | 
					    for _ in range(self.N): | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      return {} | 
					 | 
					 | 
					 | 
					      thread = threading.Thread(target=get_fw_versions, args=(fake_socket, fake_socket, brand), | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					                                kwargs=dict(num_pandas=num_pandas)) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    with mock.patch("openpilot.selfdrive.car.isotp_parallel_query.IsoTpParallelQuery.get_data", fake_get_data): | 
					 | 
					 | 
					 | 
					      brand_time += self._run_thread(thread) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      fake_socket = FakeSocket() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      brand_time = 0 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      for _ in range(self.N): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        fake_timeout_time = 0 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        thread = threading.Thread(target=get_fw_versions, args=(fake_socket, fake_socket, brand), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                  kwargs=dict(num_pandas=num_pandas)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        brand_time += self._run_thread(thread) + fake_timeout_time | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return brand_time / self.N | 
					 | 
					 | 
					 | 
					    return brand_time / self.N | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -235,7 +227,7 @@ class TestFwFingerprintTiming(unittest.TestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  @pytest.mark.timeout(60) | 
					 | 
					 | 
					 | 
					  @pytest.mark.timeout(60) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def test_fw_query_timing(self): | 
					 | 
					 | 
					 | 
					  def test_fw_query_timing(self): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    total_ref_time = 6.58 | 
					 | 
					 | 
					 | 
					    total_ref_time = 6.41 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    brand_ref_times = { | 
					 | 
					 | 
					 | 
					    brand_ref_times = { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      1: { | 
					 | 
					 | 
					 | 
					      1: { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        'body': 0.11, | 
					 | 
					 | 
					 | 
					        'body': 0.11, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |