summaryrefslogtreecommitdiff
path: root/test/timing/timing.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/timing/timing.h')
-rw-r--r--test/timing/timing.h28
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;
+}
+