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 | |