diff options
author | amanda@chromium.org <amanda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-03 21:47:07 +0000 |
---|---|---|
committer | amanda@chromium.org <amanda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-03 21:47:07 +0000 |
commit | 39f729fe207a9e28b1c5e58f9f2261219fec89ef (patch) | |
tree | b652b98899c04c60f028472a94d6316fbbfd744c /base/time_posix.cc | |
parent | f306e355e832a967f2051d995f9b95b8200bce75 (diff) | |
download | chromium_src-39f729fe207a9e28b1c5e58f9f2261219fec89ef.zip chromium_src-39f729fe207a9e28b1c5e58f9f2261219fec89ef.tar.gz chromium_src-39f729fe207a9e28b1c5e58f9f2261219fec89ef.tar.bz2 |
Revert r4473 to fix build breakage (local time zone tests failed)
TBR mmentovai@chromium.org
Review URL: http://codereview.chromium.org/9274
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4496 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/time_posix.cc')
-rw-r--r-- | base/time_posix.cc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/base/time_posix.cc b/base/time_posix.cc index 81f9bad..784a9f5 100644 --- a/base/time_posix.cc +++ b/base/time_posix.cc @@ -4,6 +4,9 @@ #include "base/time.h" +#ifdef OS_MACOSX +#include <mach/mach_time.h> +#endif #include <sys/time.h> #include <time.h> @@ -89,7 +92,32 @@ void Time::Explode(bool is_local, Exploded* exploded) const { TimeTicks TimeTicks::Now() { uint64_t absolute_micro; -#if defined(OS_POSIX) && \ +#if defined(OS_MACOSX) + static mach_timebase_info_data_t timebase_info; + if (timebase_info.denom == 0) { + // Zero-initialization of statics guarantees that denom will be 0 before + // calling mach_timebase_info. mach_timebase_info will never set denom to + // 0 as that would be invalid, so the zero-check can be used to determine + // whether mach_timebase_info has already been called. This is + // recommended by Apple's QA1398. + kern_return_t kr = mach_timebase_info(&timebase_info); + DCHECK(kr == KERN_SUCCESS); + } + + // mach_absolute_time is it when it comes to ticks on the Mac. Other calls + // with less precision (such as TickCount) just call through to + // mach_absolute_time. + + // timebase_info converts absolute time tick units into nanoseconds. Convert + // to microseconds up front to stave off overflows. + absolute_micro = mach_absolute_time() / Time::kNanosecondsPerMicrosecond * + timebase_info.numer / timebase_info.denom; + + // Don't bother with the rollover handling that the Windows version does. + // With numer and denom = 1 (the expected case), the 64-bit absolute time + // reported in nanoseconds is enough to last nearly 585 years. + +#elif defined(OS_POSIX) && \ defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 struct timespec ts; |