Reimplement clock(3) using clock_gettime(3)
Unlike times(), clock_gettime() is implemented as a vDSO on many architectures. So, using clock_gettime() will return a more accurate time and do so with less overhead because it does have the overhead of calling into the kernel. It is also significantly more accurate because it measures the actual time in nanoseconds rather than the number of ticks (typically 1 millisecond or more). Bug: 17814435 (cherry picked from commit 8d0b2dbf2154d5da17ff09b1d4f864d281362ad2) Change-Id: Id4945d9f387330518f78669809639952e9227ed9
This commit is contained in:
parent
ea9800e985
commit
a508714800
@ -30,12 +30,13 @@
|
||||
#include <sys/sysconf.h>
|
||||
#include <sys/times.h>
|
||||
|
||||
#define NS_PER_S 1000000000 // No "private/bionic_constants.h" in lmp-dev.
|
||||
|
||||
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock.html
|
||||
clock_t clock() {
|
||||
tms t;
|
||||
times(&t);
|
||||
// Although times(2) and clock(3) both use the type clock_t, the units are
|
||||
// different. For times(2) it's pure clock ticks, but for clock(3) the unit
|
||||
// is CLOCKS_PER_SEC, so we need to scale appropriately.
|
||||
return (t.tms_utime + t.tms_stime) * (CLOCKS_PER_SEC / sysconf(_SC_CLK_TCK));
|
||||
timespec ts;
|
||||
if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) == -1) {
|
||||
return -1;
|
||||
}
|
||||
return (ts.tv_sec * CLOCKS_PER_SEC) + (ts.tv_nsec / (NS_PER_S / CLOCKS_PER_SEC));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user