Shift monotonic_coarse_clock into Chrono.h and rename it to coarse_steady_clock
authorYedidya Feldblum <yfeldblum@fb.com>
Sat, 30 Dec 2017 22:26:38 +0000 (14:26 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Sat, 30 Dec 2017 22:50:22 +0000 (14:50 -0800)
Summary: The rename is to bring it closer in line with the naming conventions in the standard library, and the move is because it doesn't make sense to have clocks defined in stop_watch.

Reviewed By: Orvid

Differential Revision: D6329551

fbshipit-source-id: 09d9a48eb47b8fd3761a1bd4350d9ca748fe1f96

folly/Chrono.h
folly/stop_watch.h
folly/test/SharedMutexTest.cpp

index 53cf480fbd7db906dabee81ae3229a37f5b37fb9..6a861c5d424a6fc5eb4a36ed866088e7f2ffb713 100644 (file)
 #pragma once
 
 #include <chrono>
+#include <stdexcept>
 #include <type_traits>
 
+#include <folly/Portability.h>
+#include <folly/portability/Time.h>
+
 /***
  *  include or backport:
  *  * std::chrono::ceil
@@ -41,6 +45,35 @@ namespace chrono {
 
 namespace folly {
 namespace chrono {
+namespace detail {
+[[noreturn]] FOLLY_NOINLINE inline void throw_coarse_steady_clock_now_exn() {
+  throw std::runtime_error("Error using CLOCK_MONOTONIC_COARSE.");
+}
+} // namespace detail
+
+struct coarse_steady_clock {
+  using rep = std::chrono::milliseconds::rep;
+  using period = std::chrono::milliseconds::period;
+  using duration = std::chrono::duration<rep, period>;
+  using time_point = std::chrono::time_point<coarse_steady_clock, duration>;
+  constexpr static bool is_steady = true;
+
+  static time_point now() {
+#ifndef CLOCK_MONOTONIC_COARSE
+    return time_point(std::chrono::duration_cast<duration>(
+        std::chrono::steady_clock::now().time_since_epoch()));
+#else
+    timespec ts;
+    auto ret = clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
+    if (ret != 0) {
+      detail::throw_coarse_steady_clock_now_exn();
+    }
+    return time_point(std::chrono::duration_cast<duration>(
+        std::chrono::seconds(ts.tv_sec) +
+        std::chrono::nanoseconds(ts.tv_nsec)));
+#endif
+  }
+};
 
 namespace detail {
 
index 5bac22a2e373a2e9e462f0267d81cf4ed72a9e7f..5fbbda9b6ba23a19a498839daa6bd91682d58c80 100644 (file)
 
 #pragma once
 
-#include <folly/portability/Time.h>
 #include <chrono>
 #include <stdexcept>
 #include <utility>
 
-namespace folly {
-
-#ifdef CLOCK_MONOTONIC_COARSE
-struct monotonic_coarse_clock {
-  typedef std::chrono::milliseconds::rep rep;
-  typedef std::chrono::milliseconds::period period;
-  typedef std::chrono::milliseconds duration;
-  typedef std::chrono::time_point<monotonic_coarse_clock> time_point;
-  constexpr static bool is_steady = true;
+#include <folly/Chrono.h>
+#include <folly/portability/Time.h>
 
-  static time_point now() {
-    timespec ts;
-    auto ret = clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
-    if (ret != 0) {
-      throw std::runtime_error("Error using CLOCK_MONOTONIC_COARSE.");
-    }
-    return time_point(
-        duration((ts.tv_sec * 1000) + ((ts.tv_nsec / 1000) / 1000)));
-  }
-};
-#else
-using monotonic_coarse_clock = std::chrono::steady_clock;
-#endif
+namespace folly {
 
 using monotonic_clock = std::chrono::steady_clock;
 
@@ -299,8 +279,9 @@ struct custom_stop_watch {
  *
  * @author: Marcelo Juchem <marcelo@fb.com>
  */
-template <typename Duration = monotonic_coarse_clock::duration>
-using coarse_stop_watch = custom_stop_watch<monotonic_coarse_clock, Duration>;
+template <typename Duration = folly::chrono::coarse_steady_clock::duration>
+using coarse_stop_watch =
+    custom_stop_watch<folly::chrono::coarse_steady_clock, Duration>;
 
 /**
  * A type alias for `custom_stop_watch` that uses a monotonic clock as the time
@@ -319,6 +300,6 @@ using coarse_stop_watch = custom_stop_watch<monotonic_coarse_clock, Duration>;
  *
  * @author: Marcelo Juchem <marcelo@fb.com>
  */
-template <typename Duration = monotonic_clock::duration>
-using stop_watch = custom_stop_watch<monotonic_clock, Duration>;
+template <typename Duration = std::chrono::steady_clock::duration>
+using stop_watch = custom_stop_watch<std::chrono::steady_clock, Duration>;
 } // namespace folly
index f27ba1bcf21076c5609d844d1f5d7e5ef9ed345d..53be67bde050a1d15b4fe11ae554f66bfacb3b13 100644 (file)
@@ -33,7 +33,7 @@
 using namespace folly;
 using namespace folly::test;
 using namespace std;
-using namespace chrono;
+using namespace std::chrono;
 
 typedef DeterministicSchedule DSched;
 typedef SharedMutexImpl<true, void, DeterministicAtomic, true>