openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models. 
				 
			
		 
		
		
		
		
		
		
			You can not select more than 25 topics 
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long. 
		
		
		
	
	
		
		
			
	
	
		
			
				
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  time 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  Profiler ( ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  __init__ ( self ,  enabled = False ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . enabled  =  enabled 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . cp  =  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . cp_ignored  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . iter  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . start_time  =  time . time ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . last_time  =  self . start_time 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . tot  =  0. 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  reset ( self ,  enabled = False ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . enabled  =  enabled 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . cp  =  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . cp_ignored  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . iter  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . start_time  =  time . time ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . last_time  =  self . start_time 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  checkpoint ( self ,  name ,  ignore = False ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # ignore flag needed when benchmarking threads with ratekeeper 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  self . enabled : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    tt  =  time . time ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  name  not  in  self . cp : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      self . cp [ name ]  =  0. 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  ignore : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . cp_ignored . append ( name ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . cp [ name ]  + =  tt  -  self . last_time 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  ignore : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      self . tot  + =  tt  -  self . last_time 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . last_time  =  tt 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  display ( self ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  self . enabled : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . iter  + =  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( " ******* Profiling ******* " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  n ,  ms  in  sorted ( self . cp . items ( ) ,  key = lambda  x :  - x [ 1 ] ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  n  in  self . cp_ignored : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        print ( " %30s :  %9.2f    percent:  %3.0f    IGNORED "  %  ( n ,  ms * 1000.0 ,  ms / self . tot * 100 ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      else : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        print ( " %30s :  %9.2f    percent:  %3.0f "  %  ( n ,  ms * 1000.0 ,  ms / self . tot * 100 ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( " Iter clock:  %2.6f    TOTAL:  %2.2f "  %  ( self . tot / self . iter ,  self . tot ) )