# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/common/timing.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define CLOUDLOG_DEBUG 10 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define CLOUDLOG_INFO 20 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define CLOUDLOG_WARNING 30 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define CLOUDLOG_ERROR 40 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define CLOUDLOG_CRITICAL 50 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  cloudlog_e ( int  levelnum ,  const  char *  filename ,  int  lineno ,  const  char *  func , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                const  char *  fmt ,  . . . )  /*__attribute__ ((format (printf, 6, 7)))*/ ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  cloudlog_bind ( const  char *  k ,  const  char *  v ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define cloudlog(lvl, fmt, ...) cloudlog_e(lvl, __FILE__, __LINE__, \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                           __func__ ,  \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                           fmt ,  # #  __VA_ARGS__ ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define cloudlog_rl(burst, millis, lvl, fmt, ...)   \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{                                                    \
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  static  uint64_t  __begin  =  0 ;                       \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  static  int  __printed  =  0 ;                          \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  static  int  __missed  =  0 ;                           \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  __burst  =  ( burst ) ;                             \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  __millis  =  ( millis ) ;                           \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint64_t  __ts  =  nanos_since_boot ( ) ;                \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! __begin )  __begin  =  __ts ;                      \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( __begin  +  __millis * 1000000ULL  <  __ts )  {        \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( __missed )  {                                  \
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      cloudlog ( CLOUDLOG_WARNING ,  " cloudlog: %d messages suppressed " ,  __missed ) ;  \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }                                                \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    __begin  =  0 ;                                     \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    __printed  =  0 ;                                   \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    __missed  =  0 ;                                    \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }                                                  \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                    \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( __printed  <  __burst )  {                         \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cloudlog ( lvl ,  fmt ,  # #  __VA_ARGS__ ) ;              \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    __printed + + ;                                     \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  {                                           \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    __missed + + ;                                      \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }                                                  \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOGD(fmt, ...) cloudlog(CLOUDLOG_DEBUG, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOG(fmt, ...) cloudlog(CLOUDLOG_INFO, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOGW(fmt, ...) cloudlog(CLOUDLOG_WARNING, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOGE(fmt, ...) cloudlog(CLOUDLOG_ERROR, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOGD_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_DEBUG, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOG_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_INFO, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOGW_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_WARNING, fmt, ## __VA_ARGS__) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define LOGE_100(fmt, ...) cloudlog_rl(2, 100, CLOUDLOG_ERROR, fmt, ## __VA_ARGS__)