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