]> git.cworth.org Git - apitrace/commitdiff
Implement getTime for OS X
authorJeff Muizelaar <jmuizelaar@mozilla.com>
Wed, 29 Feb 2012 14:58:32 +0000 (09:58 -0500)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Thu, 8 Mar 2012 09:19:48 +0000 (10:19 +0100)
mach_absolute_time lowest level timing function on OS X

Signed-off-by: Jose Fonseca <jose.r.fonseca@gmail.com>
common/os_posix.cpp
common/os_time.hpp

index 261fe88c929409d796b8cbd82ed6ea574dfc9990..3eebbd862d4a78448b062a11ba10ce1232d8fcb8 100644 (file)
@@ -158,6 +158,10 @@ log(const char *format, ...)
     logging = false;
 }
 
+#if defined(__APPLE__)
+long long timeFrequency = 0LL;
+#endif
+
 void
 abort(void)
 {
index a4f52093c94c125e7874a8e77f1597f056c0ab7b..75175d85f6ecb15d8fc69622e10526b23ab5bb3d 100644 (file)
@@ -35,6 +35,8 @@
 #include <windows.h>
 #elif defined(__linux__)
 #include <time.h>
+#elif defined(__APPLE__)
+#include <mach/mach_time.h>
 #else
 #include <sys/time.h>
 #endif
 namespace os {
 
     // OS dependent time frequency
-#if defined(_WIN32)
-    // runtime variable on Windows
+#if defined(_WIN32) || defined(__APPLE__)
+    // runtime variable on Windows and MacOSX
     extern long long timeFrequency;
 #elif defined(__linux__)
-    // nanoseconds
-    static const long long timeFrequency = 1000000000;
+    // nanoseconds on Linux
+    static const long long timeFrequency = 1000000000LL;
 #else
-    // microseconds on
-    static const long long timeFrequency = 1000000;
+    // microseconds on Unices
+    static const long long timeFrequency = 1000000LL;
 #endif
 
     // Time from an unknown base in a unit determined by timeFrequency
@@ -72,6 +74,13 @@ namespace os {
             return 0;
         }
         return tp.tv_sec * 1000000000LL + tp.tv_nsec;
+#elif defined(__APPLE__)
+        if (!timeFrequency) {
+            mach_timebase_info_data_t timebaseInfo;
+            mach_timebase_info(&timebaseInfo);
+            timeFrequency = 1000000000LL * timebaseInfo.denom / timebaseInfo.numer;
+        }
+        return mach_absolute_time();
 #else
         struct timeval tv;
         gettimeofday(&tv, NULL);