11.1Sjoerg#include <mach/mach_time.h> 21.1Sjoerg#include <stdint.h> 31.1Sjoerg#include <stdlib.h> 41.1Sjoerg 51.1Sjoergdouble intervalInCycles( uint64_t startTime, uint64_t endTime ) 61.1Sjoerg{ 71.1Sjoerg uint64_t rawTime = endTime - startTime; 81.1Sjoerg static double conversion = 0.0; 91.1Sjoerg 101.1Sjoerg if( 0.0 == conversion ) 111.1Sjoerg { 121.1Sjoerg mach_timebase_info_data_t info; 131.1Sjoerg kern_return_t err = mach_timebase_info( &info ); 141.1Sjoerg if( 0 != err ) 151.1Sjoerg return 0; 161.1Sjoerg 171.1Sjoerg uint64_t freq = 0; 181.1Sjoerg size_t freqSize = sizeof( freq ); 191.1Sjoerg int err2 = sysctlbyname( "hw.cpufrequency", &freq, &freqSize, NULL, 0L ); 201.1Sjoerg if( 0 != err2 ) 211.1Sjoerg return 0; 221.1Sjoerg 231.1Sjoerg conversion = (double) freq * (1e-9 * (double) info.numer / (double) info.denom); 241.1Sjoerg } 251.1Sjoerg 261.1Sjoerg return (double) rawTime * conversion; 271.1Sjoerg} 281.1Sjoerg 29