From ad5759821ced59bbb70eb36d396df2a787141089 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sat, 13 Aug 2011 08:40:11 -0400 Subject: fix clock() function it previously was returning the pseudo-monotonic-realtime clock returned by times() rather than process cputime. it also violated C namespace by pulling in times(). we now use clock_gettime() if available because times() has ridiculously bad resolution. still provide a fallback for ancient kernels without clock_gettime. --- src/time/clock.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/time/clock.c') diff --git a/src/time/clock.c b/src/time/clock.c index 2feddb36..e6e9e776 100644 --- a/src/time/clock.c +++ b/src/time/clock.c @@ -1,9 +1,14 @@ #include #include -/* this function assumes 100 hz linux and corrects for it */ +int __clock_gettime(clockid_t, struct timespec *); + clock_t clock() { + struct timespec ts; struct tms tms; - return (unsigned long)times(&tms)*10000; + if (!__clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts)) + return ts.tv_sec*1000000 + ts.tv_nsec/1000; + __syscall(SYS_times, &tms); + return (tms.tms_utime + tms.tms_stime)*100; } -- cgit v1.2.1