Index: src/ports/SkTime_Unix.cpp |
diff --git a/src/ports/SkTime_Unix.cpp b/src/ports/SkTime_Unix.cpp |
index f519a69d07c2843a60427ea385a5d79b11dd765c..cdf7f3d947c94c8d042a1b553ed8857eaf5acb58 100644 |
--- a/src/ports/SkTime_Unix.cpp |
+++ b/src/ports/SkTime_Unix.cpp |
@@ -12,10 +12,8 @@ |
#include <sys/time.h> |
#include <time.h> |
-void SkTime::GetDateTime(DateTime* dt) |
-{ |
- if (dt) |
- { |
+void SkTime::GetDateTime(DateTime* dt) { |
+ if (dt) { |
time_t m_time; |
time(&m_time); |
struct tm* tstruct; |
@@ -31,9 +29,33 @@ void SkTime::GetDateTime(DateTime* dt) |
} |
} |
-SkMSec SkTime::GetMSecs() |
-{ |
- struct timeval tv; |
- gettimeofday(&tv, NULL); |
- return (SkMSec) (tv.tv_sec * 1000 + tv.tv_usec / 1000 ); // microseconds to milliseconds |
+#ifdef __MACH__ |
+# include <mach/mach_time.h> |
+ |
+namespace { |
+ |
+struct ConversionFactor { |
+ ConversionFactor() { |
+ mach_timebase_info_data_t timebase; |
+ mach_timebase_info(&timebase); |
+ toNanos = (double) timebase.numer / timebase.denom; |
+ } |
+ double toNanos; |
+}; |
+ |
+} // namespace |
+ |
+SkNSec SkTime::GetNSecs() { |
+ static ConversionFactor convert; // Since already know we're on Mac, this is threadsafe. |
+ return mach_absolute_time() * convert.toNanos; |
} |
+ |
+#else // Linux, presumably all others too |
+ |
+SkNSec SkTime::GetNSecs() { |
+ struct timespec time; |
+ clock_gettime(CLOCK_MONOTONIC, &time); |
+ return (SkNSec)(time.tv_sec * 1000000000 + time.tv_nsec); |
+} |
+ |
+#endif |