use CLOCK_MONOTONIC in the timer if it's available

Linux sets _POSIX_MONOTONIC_CLOCK to 0 meaning it *might* be available,
so a sysconf check is necessary at runtime with a fallback to the
mandatory CLOCK_REALTIME clock.
This commit is contained in:
Daniel Micay 2014-10-16 17:02:18 -04:00 committed by Jason Evans
parent f69e2f6fda
commit d6384b09e1
2 changed files with 27 additions and 0 deletions

View file

@ -4,22 +4,39 @@ void
timer_start(timedelta_t *timer)
{
#if JEMALLOC_CLOCK_GETTIME
if (sysconf(_SC_MONOTONIC_CLOCK) <= 0)
timer->clock_id = CLOCK_REALTIME;
else
timer->clock_id = CLOCK_MONOTONIC;
clock_gettime(timer->clock_id, &timer->tv0);
#else
gettimeofday(&timer->tv0, NULL);
#endif
}
void
timer_stop(timedelta_t *timer)
{
#if JEMALLOC_CLOCK_GETTIME
clock_gettime(timer->clock_id, &timer->tv1);
#else
gettimeofday(&timer->tv1, NULL);
#endif
}
uint64_t
timer_usec(const timedelta_t *timer)
{
#if JEMALLOC_CLOCK_GETTIME
return (((timer->tv1.tv_sec - timer->tv0.tv_sec) * 1000000) +
(timer->tv1.tv_nsec - timer->tv0.tv_nsec) / 1000);
#else
return (((timer->tv1.tv_sec - timer->tv0.tv_sec) * 1000000) +
timer->tv1.tv_usec - timer->tv0.tv_usec);
#endif
}
void