SystemClock: use clock_gettime() on devices without /dev/alarm
On devices with an up-to-date kernel, the back-in-time bug affecting clock_gettime() has been fixed and it can safely be used as an alternative to the ANDROID_ALARM_GET_TIME ioctl. To ensure consistent behavior on existing devices, make clock_gettime() a fallback for when the alarm driver isn't available. Change-Id: I384af5e7ec9e73e0bad4b6b0f987a8ea4583cba6 Signed-off-by: Greg Hackmann <ghackmann@google.com>
This commit is contained in:
parent
a585e662e0
commit
64289760a2
|
@ -119,22 +119,6 @@ int64_t elapsedRealtimeNano()
|
|||
static volatile int prevMethod;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* b/7100774
|
||||
* clock_gettime appears to have clock skews and can sometimes return
|
||||
* backwards values. Disable its use until we find out what's wrong.
|
||||
*/
|
||||
result = clock_gettime(CLOCK_BOOTTIME, &ts);
|
||||
if (result == 0) {
|
||||
timestamp = seconds_to_nanoseconds(ts.tv_sec) + ts.tv_nsec;
|
||||
checkTimeStamps(timestamp, &prevTimestamp, &prevMethod,
|
||||
METHOD_CLOCK_GETTIME);
|
||||
return timestamp;
|
||||
}
|
||||
#endif
|
||||
|
||||
// CLOCK_BOOTTIME doesn't exist, fallback to /dev/alarm
|
||||
static int s_fd = -1;
|
||||
|
||||
if (s_fd == -1) {
|
||||
|
@ -153,6 +137,15 @@ int64_t elapsedRealtimeNano()
|
|||
return timestamp;
|
||||
}
|
||||
|
||||
// /dev/alarm doesn't exist, fallback to CLOCK_BOOTTIME
|
||||
result = clock_gettime(CLOCK_BOOTTIME, &ts);
|
||||
if (result == 0) {
|
||||
timestamp = seconds_to_nanoseconds(ts.tv_sec) + ts.tv_nsec;
|
||||
checkTimeStamps(timestamp, &prevTimestamp, &prevMethod,
|
||||
METHOD_CLOCK_GETTIME);
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
// XXX: there was an error, probably because the driver didn't
|
||||
// exist ... this should return
|
||||
// a real error, like an exception!
|
||||
|
|
Loading…
Reference in New Issue