// Copyright (c) the JPEG XL Project Authors. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include "lib/extras/time.h" #include #include #include #include #include "lib/jxl/base/os_macros.h" // for JXL_OS_* #if JXL_OS_WIN #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // JXL_OS_WIN #if JXL_OS_MAC #include #include #endif // JXL_OS_MAC #if JXL_OS_HAIKU #include #endif // JXL_OS_HAIKU namespace jxl { double Now() { #if JXL_OS_WIN LARGE_INTEGER counter; (void)QueryPerformanceCounter(&counter); LARGE_INTEGER freq; (void)QueryPerformanceFrequency(&freq); return double(counter.QuadPart) / freq.QuadPart; #elif JXL_OS_MAC const auto t = mach_absolute_time(); // On OSX/iOS platform the elapsed time is cpu time unit // We have to query the time base information to convert it back // See https://developer.apple.com/library/mac/qa/qa1398/_index.html static mach_timebase_info_data_t timebase; if (timebase.denom == 0) { (void)mach_timebase_info(&timebase); } return double(t) * timebase.numer / timebase.denom * 1E-9; #elif JXL_OS_HAIKU return double(system_time_nsecs()) * 1E-9; #else timespec t; clock_gettime(CLOCK_MONOTONIC, &t); return t.tv_sec + t.tv_nsec * 1E-9; #endif } } // namespace jxl