[PATCH] A steadier steady_clock

2012-10-21 Thread 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,


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

2012-10-21 Thread Sam Varshavchik

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