|  | #include <mach/mach_time.h> | 
|  | #include <stdint.h> | 
|  | #include <stdlib.h> | 
|  |  | 
|  | double intervalInCycles( uint64_t startTime, uint64_t endTime ) | 
|  | { | 
|  | uint64_t rawTime = endTime - startTime; | 
|  | static double conversion = 0.0; | 
|  |  | 
|  | if( 0.0 == conversion ) | 
|  | { | 
|  | mach_timebase_info_data_t	info; | 
|  | kern_return_t err = mach_timebase_info( &info ); | 
|  | if( 0 != err ) | 
|  | return 0; | 
|  |  | 
|  | uint64_t freq = 0; | 
|  | size_t freqSize = sizeof( freq ); | 
|  | int err2 = sysctlbyname( "hw.cpufrequency", &freq, &freqSize, NULL, 0L ); | 
|  | if( 0 != err2 ) | 
|  | return 0; | 
|  |  | 
|  | conversion = (double) freq * (1e-9 * (double) info.numer / (double) info.denom); | 
|  | } | 
|  |  | 
|  | return (double) rawTime * conversion; | 
|  | } | 
|  |  |