Home | History | Annotate | Download | only in timing
      1 #include <mach/mach_time.h>
      2 #include <stdint.h>
      3 #include <stdlib.h>
      4 
      5 double intervalInCycles( uint64_t startTime, uint64_t endTime )
      6 {
      7 	uint64_t rawTime = endTime - startTime;
      8 	static double conversion = 0.0;
      9 
     10 	if( 0.0 == conversion )
     11 	{
     12 		mach_timebase_info_data_t	info;
     13 		kern_return_t err = mach_timebase_info( &info );
     14 		if( 0 != err )
     15 			return 0;
     16 
     17 		uint64_t freq = 0;
     18 		size_t freqSize = sizeof( freq );
     19 		int err2 = sysctlbyname( "hw.cpufrequency", &freq, &freqSize, NULL, 0L );
     20 		if( 0 != err2 )
     21 			return 0;
     22 
     23 		conversion = (double) freq * (1e-9 * (double) info.numer / (double) info.denom);
     24 	}
     25 
     26 	return (double) rawTime * conversion;
     27 }
     28 
     29