os: Fix GetTimeInMicros resolution

GetTimeInMillis is called first, which sets clockid to
CLOCK_MONOTONIC_COARSE, which is typically much lower resolution than
the callers of GetTimeInMicros want.

Prior to a779fda224, GetTimeInMillis and
GetTimeInMicros did not share a clockid.

Restore the clockid split to fix the granularity of GetTimeInMicros.

Signed-off-by: Peter Harris <pharris@opentext.com>
This commit is contained in:
Peter Harris 2019-01-30 14:51:07 -05:00
parent a093a88531
commit 937a5b78a2

View File

@ -485,14 +485,15 @@ GetTimeInMicros(void)
struct timeval tv; struct timeval tv;
#ifdef MONOTONIC_CLOCK #ifdef MONOTONIC_CLOCK
struct timespec tp; struct timespec tp;
static clockid_t uclockid;
if (!clockid) { if (!uclockid) {
if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0) if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
clockid = CLOCK_MONOTONIC; uclockid = CLOCK_MONOTONIC;
else else
clockid = ~0L; uclockid = ~0L;
} }
if (clockid != ~0L && clock_gettime(clockid, &tp) == 0) if (uclockid != ~0L && clock_gettime(uclockid, &tp) == 0)
return (CARD64) tp.tv_sec * (CARD64)1000000 + tp.tv_nsec / 1000; return (CARD64) tp.tv_sec * (CARD64)1000000 + tp.tv_nsec / 1000;
#endif #endif