Commit 37129826 authored by Pádraig Brady's avatar Pádraig Brady Committed by Facebook Github Bot

support folly::chrono::coarse_steady_clock with c++17

Summary:
Move the coarse_steady_clock definition outside
the c++ < 17 specific defines, as otherwise it's not
defined when using -std=gnu++17.

Reviewed By: yfeldblum

Differential Revision: D6780601

fbshipit-source-id: 35cc5aa10db7d890e17bf03cc5e80803a9356d7a
parent 73fbda10
......@@ -45,35 +45,6 @@ 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 {
......@@ -185,3 +156,37 @@ constexpr std::chrono::time_point<Clock, To> round(
} // namespace folly
#endif
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 chrono
} // namespace folly
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment