[PATCH] A steadier steady_clock
Based on a casual browsing of clock_gettime(3), CLOCK_MONOTONIC_RAW seems to be a better fit for std::chrono::steady_clock's requirements as given in 20.11.7.2, with recent Linux kernels, Something like this: Index: libstdc++-v3/src/c++11/chrono.cc === --- libstdc++-v3/src/c++11/chrono.cc(revision 192652) +++ libstdc++-v3/src/c++11/chrono.cc(working copy) @@ -70,7 +70,11 @@ { timespec tp; // -EINVAL, -EFAULT +#ifdef CLOCK_MONOTONIC_RAW + clock_gettime(CLOCK_MONOTONIC_RAW, &tp); +#else clock_gettime(CLOCK_MONOTONIC, &tp); +#endif return time_point(duration(chrono::seconds(tp.tv_sec) + chrono::nanoseconds(tp.tv_nsec))); } pgpx8JOIp7lSU.pgp Description: PGP signature
Re: [PATCH] A steadier steady_clock
Florian Weimer writes: * Sam Varshavchik: > Based on a casual browsing of clock_gettime(3), CLOCK_MONOTONIC_RAW > seems to be a better fit for std::chrono::steady_clock's requirements > as given in 20.11.7.2, with recent Linux kernels, Are the Linux clock semantics documented somewhere in detail? clock_gettime(3) says: # CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific) # Similar to CLOCK_MONOTONIC, but provides access to a raw hard‐ # ware-based time that is not subject to NTP adjustments. That looks like a better fit for what 20.11.7.2 says steady_clock should be. pgpXXi3eNIJFr.pgp Description: PGP signature