From a71148b702f8e29db531702d6120d92a4116f1de Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 13 Apr 2010 16:53:38 +0000 Subject: [PATCH] 2010-04-14 Tatsuhiro Tsujikawa Use elapsed time between two mach_absolute_time() calls. Fixed compile error in Mac OS X. * src/clock_gettime_osx.cc * src/timespec.h --- ChangeLog | 16 ++++++++++++++++ src/clock_gettime_osx.cc | 18 +++++++++++++----- src/timespec.h | 2 ++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 054e74c8..b23f0c84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2010-04-14 Tatsuhiro Tsujikawa + + Use elapsed time between two mach_absolute_time() calls. + Fixed compile error in Mac OS X. + * src/clock_gettime_osx.cc + * src/timespec.h + +2010-04-14 Tatsuhiro Tsujikawa + + Implemented clock_gettime() using mach_absolute_time in Mac OS X. + * configure.ac + * src/Makefile.am + * src/a2time.h + * src/clock_gettime_osx.cc + * src/clock_gettime_osx.h + 2010-04-14 Tatsuhiro Tsujikawa Implemented clock_gettime() using timeGetTime in mingw. diff --git a/src/clock_gettime_osx.cc b/src/clock_gettime_osx.cc index 4d2dbcae..a3d071d5 100644 --- a/src/clock_gettime_osx.cc +++ b/src/clock_gettime_osx.cc @@ -38,13 +38,21 @@ int clock_gettime(int dummyid, struct timespec* tp) { - uint64_t mt = mach_absolute_time(); + static uint64_t lasttime = mach_absolute_time(); + static struct timespec monotime = {2678400, 0}; // 1month offset(24*3600*31) + uint64_t now = mach_absolute_time(); static mach_timebase_info_data_t baseinfo; if(baseinfo.denom == 0) { mach_timebase_info(&baseinfo); } - uint64_t t = mt*baseinfo.numer/baseinfo.denom; - tp->tv_sec = t/1000000000+2678400; // 1month offset(24*3600*31) - tp->tv_nsec = t%1000000000; - return 1; + uint64_t elapsed = (now-lasttime)*baseinfo.numer/baseinfo.denom; + monotime.tv_sec += elapsed/1000000000; + monotime.tv_nsec += elapsed%1000000000; + if(monotime.tv_nsec >= 1000000000) { + monotime.tv_sec += monotime.tv_nsec/1000000000; + monotime.tv_nsec %= 1000000000; + } + lasttime = now; + *tp = monotime; + return 0; } diff --git a/src/timespec.h b/src/timespec.h index f152d064..def9c726 100644 --- a/src/timespec.h +++ b/src/timespec.h @@ -34,6 +34,8 @@ #ifndef _D_TIMESPEC_H_ #define _D_TIMESPEC_H_ +#include "common.h" + #include #ifndef HAVE_STRUCT_TIMESPEC