| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6,6 +6,9 @@ import subprocess | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import multiprocessing | 
					 | 
					 | 
					 | 
					import multiprocessing | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import os | 
					 | 
					 | 
					 | 
					import os | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from ctypes.util import find_library | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					CLOCK_MONOTONIC_RAW = 4 # see <linux/time.h> | 
					 | 
					 | 
					 | 
					CLOCK_MONOTONIC_RAW = 4 # see <linux/time.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					CLOCK_BOOTTIME = 7 | 
					 | 
					 | 
					 | 
					CLOCK_BOOTTIME = 7 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -15,12 +18,18 @@ class timespec(ctypes.Structure): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ('tv_nsec', ctypes.c_long), | 
					 | 
					 | 
					 | 
					    ('tv_nsec', ctypes.c_long), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ] | 
					 | 
					 | 
					 | 
					  ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					libc_name = find_library('c') | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					if libc_name is None: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  platform_name = platform.system() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if platform_name.startswith('linux'): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    libc_name = 'libc.so.6' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if platform_name.startswith(('freebsd', 'netbsd')): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    libc_name = 'libc.so' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  elif platform_name.lower() == 'darwin': | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    libc_name = 'libc.dylib' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					try: | 
					 | 
					 | 
					 | 
					try: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  libc = ctypes.CDLL('libc.so', use_errno=True) | 
					 | 
					 | 
					 | 
					  libc = ctypes.CDLL(libc_name, use_errno=True) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					except OSError: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  try: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    libc = ctypes.CDLL('libc.so.6', use_errno=True) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					except OSError: | 
					 | 
					 | 
					 | 
					except OSError: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  libc = None | 
					 | 
					 | 
					 | 
					  libc = None | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -28,10 +37,6 @@ if libc is not None: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  libc.clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)] | 
					 | 
					 | 
					 | 
					  libc.clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def clock_gettime(clk_id): | 
					 | 
					 | 
					 | 
					def clock_gettime(clk_id): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if platform.system().lower() == "darwin": | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # TODO: fix this | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return time.time() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  t = timespec() | 
					 | 
					 | 
					 | 
					  t = timespec() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if libc.clock_gettime(clk_id, ctypes.pointer(t)) != 0: | 
					 | 
					 | 
					 | 
					  if libc.clock_gettime(clk_id, ctypes.pointer(t)) != 0: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    errno_ = ctypes.get_errno() | 
					 | 
					 | 
					 | 
					    errno_ = ctypes.get_errno() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |