177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <mach/mach_time.h> 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <stdint.h> 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <stdlib.h> 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble intervalInCycles( uint64_t startTime, uint64_t endTime ) 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao uint64_t rawTime = endTime - startTime; 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao static double conversion = 0.0; 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao if( 0.0 == conversion ) 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao { 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao mach_timebase_info_data_t info; 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao kern_return_t err = mach_timebase_info( &info ); 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao if( 0 != err ) 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return 0; 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao uint64_t freq = 0; 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao size_t freqSize = sizeof( freq ); 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int err2 = sysctlbyname( "hw.cpufrequency", &freq, &freqSize, NULL, 0L ); 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao if( 0 != err2 ) 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return 0; 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao conversion = (double) freq * (1e-9 * (double) info.numer / (double) info.denom); 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao } 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return (double) rawTime * conversion; 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 29