Optimized timer code for macOS (#576)

This commit is contained in:
Tillsunset 2022-12-15 03:28:44 -06:00 committed by GitHub
parent fcab8f8f1a
commit 058d11b49b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 9 deletions

View file

@ -351,10 +351,9 @@ bool match_any_of(T1 value, T2 compareTo, Types&&... others)
#endif
}
[[nodiscard]] static std::chrono::steady_clock::time_point tick_cached() noexcept
{
#ifdef _WIN32
#if BOOST_OS_WINDOWS
// get current time
static const long long _Freq = _Query_perf_frequency(); // doesn't change after system boot
const long long _Ctr = _Query_perf_counter();
@ -362,11 +361,14 @@ bool match_any_of(T1 value, T2 compareTo, Types&&... others)
const long long _Whole = (_Ctr / _Freq) * std::nano::den;
const long long _Part = (_Ctr % _Freq) * std::nano::den / _Freq;
return (std::chrono::steady_clock::time_point(std::chrono::nanoseconds(_Whole + _Part)));
#else
#elif BOOST_OS_LINUX
struct timespec tp;
clock_gettime(CLOCK_MONOTONIC_RAW, &tp);
return std::chrono::steady_clock::time_point(
std::chrono::seconds(tp.tv_sec) + std::chrono::nanoseconds(tp.tv_nsec));
#elif BOOST_OS_MACOS
return std::chrono::steady_clock::time_point(
std::chrono::nanoseconds(clock_gettime_nsec_np(CLOCK_MONOTONIC_RAW)));
#endif
}