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:
parent
a093a88531
commit
937a5b78a2
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue