| Index: src/core/SkTime.cpp
|
| diff --git a/src/core/SkTime.cpp b/src/core/SkTime.cpp
|
| index 16f66161a78969d6bea59644a30d7ed43d30ef88..86a0685c70af27703490024f15bf80ff5aef5152 100644
|
| --- a/src/core/SkTime.cpp
|
| +++ b/src/core/SkTime.cpp
|
| @@ -36,13 +36,24 @@
|
| return new double(1e6 / khz.QuadPart);
|
| });
|
| }
|
| +#elif defined(__MACH__)
|
| + // TODO: fold into std::chrono when available?
|
| + #include <mach/mach_time.h>
|
| + SK_DECLARE_STATIC_ONCE_PTR(double, ns_per_tick);
|
| + double SkTime::GetNSecs() {
|
| + uint64_t ticks = mach_absolute_time();
|
| + return ticks * *ns_per_tick.get([]{
|
| + mach_timebase_info_data_t timebase;
|
| + (void)mach_timebase_info(&timebase);
|
| + return new double(timebase.numer * 1.0 / timebase.denom);
|
| + });
|
| + }
|
| #else
|
| - // This std::chrono code looks great on Linux, Mac, and Android,
|
| - // but MSVC 2013 returns mostly garbage (0ns times, etc).
|
| - // This is ostensibly fixed in MSVC 2015.
|
| + // This std::chrono code looks great on Linux and Android,
|
| + // but MSVC 2013 returned mostly garbage (0ns times, etc).
|
| #include <chrono>
|
| double SkTime::GetNSecs() {
|
| - auto now = std::chrono::steady_clock::now();
|
| + auto now = std::chrono::high_resolution_clock::now();
|
| std::chrono::duration<double, std::nano> ns = now.time_since_epoch();
|
| return ns.count();
|
| }
|
|
|