diff options
Diffstat (limited to 'src/core/SkTime.cpp')
-rw-r--r-- | src/core/SkTime.cpp | 41 |
1 files changed, 6 insertions, 35 deletions
diff --git a/src/core/SkTime.cpp b/src/core/SkTime.cpp index ba8fe3e3a3..e89d5b9b3a 100644 --- a/src/core/SkTime.cpp +++ b/src/core/SkTime.cpp @@ -5,10 +5,10 @@ * found in the LICENSE file. */ -#include "SkOncePtr.h" #include "SkString.h" #include "SkTime.h" #include "SkTypes.h" +#include <chrono> void SkTime::DateTime::toISO8601(SkString* dst) const { if (dst) { @@ -65,37 +65,8 @@ void SkTime::GetDateTime(DateTime* dt) { } #endif // SK_BUILD_FOR_WIN32 -#if defined(_MSC_VER) - // TODO: try std::chrono again with MSVC 2015? - #include <intrin.h> - SK_DECLARE_STATIC_ONCE_PTR(double, ns_per_tick); - double SkTime::GetNSecs() { - uint64_t ticks = __rdtsc(); - return ticks * *ns_per_tick.get([]{ - LARGE_INTEGER khz; // The docs say this returns Hz, but it returns KHz. - QueryPerformanceFrequency(&khz); - 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 and Android, - // but MSVC 2013 returned mostly garbage (0ns times, etc). - #include <chrono> - double SkTime::GetNSecs() { - auto now = std::chrono::high_resolution_clock::now(); - std::chrono::duration<double, std::nano> ns = now.time_since_epoch(); - return ns.count(); - } -#endif +double SkTime::GetNSecs() { + auto now = std::chrono::high_resolution_clock::now(); + std::chrono::duration<double, std::nano> ns = now.time_since_epoch(); + return ns.count(); +} |