Index: src/platform/time.cc |
diff --git a/src/platform/time.cc b/src/platform/time.cc |
index d87dc24a65619df2e5a3adca6b94f4dc9df87b18..eb5d72fdb12e2572a2b28911ad02b23e9fc40b85 100644 |
--- a/src/platform/time.cc |
+++ b/src/platform/time.cc |
@@ -295,8 +295,10 @@ Time Time::Now() { |
struct timespec ts; |
// Use CLOCK_REALTIME_COARSE if it's available and has a precision of 1ms |
// or higher. It's serviced from the vDSO with no system call overhead. |
- static clock_t clock_id = static_cast<clock_t>(0); |
- if (!clock_id) { |
+ static clock_t clock_id = static_cast<clock_t>(-1); |
+ STATIC_ASSERT(CLOCK_REALTIME != static_cast<clock_t>(-1)); |
+ STATIC_ASSERT(CLOCK_REALTIME_COARSE != static_cast<clock_t>(-1)); |
+ if (clock_id == static_cast<clock_t>(-1)) { |
if (clock_getres(CLOCK_REALTIME_COARSE, &ts) == 0 |
&& ts.tv_nsec <= kNanosecondsPerMillisecond) |
clock_id = CLOCK_REALTIME_COARSE; |
@@ -611,8 +613,10 @@ TimeTicks TimeTicks::HighResolutionNow() { |
#if defined(CLOCK_MONOTONIC_COARSE) |
// Use CLOCK_MONOTONIC_COARSE if it's available and has a precision of 1ms |
// or higher. It's serviced from the vDSO with no system call overhead. |
- static clock_t clock_id = static_cast<clock_t>(0); |
- if (!clock_id) { |
+ static clock_t clock_id = static_cast<clock_t>(-1); |
+ STATIC_ASSERT(CLOCK_MONOTONIC != static_cast<clock_t>(-1)); |
+ STATIC_ASSERT(CLOCK_MONOTONIC_COARSE != static_cast<clock_t>(-1)); |
+ if (clock_id == static_cast<clock_t>(-1)) { |
if (clock_getres(CLOCK_MONOTONIC_COARSE, &ts) == 0 |
&& ts.tv_nsec <= Time::kNanosecondsPerMillisecond) |
clock_id = CLOCK_MONOTONIC_COARSE; |