diff options
Diffstat (limited to 'test/timing/timing.h')
-rw-r--r-- | test/timing/timing.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/timing/timing.h b/test/timing/timing.h new file mode 100644 index 000000000..bb6c41eb2 --- /dev/null +++ b/test/timing/timing.h @@ -0,0 +1,28 @@ +#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; +} + |