diff options
author | sleffler@chromium.org <sleffler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-01 20:56:43 +0000 |
---|---|---|
committer | sleffler@chromium.org <sleffler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-01 20:56:43 +0000 |
commit | 190f13f73accbebd0e715c9f09db2f1c42b582ca (patch) | |
tree | 64cc444f1864f9a1cd1c81c6bb05940592883d88 /base/time_posix.cc | |
parent | 2883287341c88da630585e227dbd94c624258cf9 (diff) | |
download | chromium_src-190f13f73accbebd0e715c9f09db2f1c42b582ca.zip chromium_src-190f13f73accbebd0e715c9f09db2f1c42b582ca.tar.gz chromium_src-190f13f73accbebd0e715c9f09db2f1c42b582ca.tar.bz2 |
Add interface to system trace clock.
Add TimeTicks::NowFromSystemTraceTime to return the current system trace
event clock (falling back to TimeTicks::HighResNow when not supported).
On systems where the system trace clock is available this allows
system and chrome events to be stamped with a common clock (eliminating
post-processing time shift adjustment that can be hard).
BUG=chromium-os:27809
TEST=unit tests + collect trace data on chrome os w/ kernel that supports clock_gettime(CLOCK_SYSTEM_TRACE)
Change-Id: Ia6a500bd13a6f09c49052a1dd1421027960d8dea
Review URL: http://codereview.chromium.org/10257020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134772 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/time_posix.cc')
-rw-r--r-- | base/time_posix.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/base/time_posix.cc b/base/time_posix.cc index 829c000..b8f1385 100644 --- a/base/time_posix.cc +++ b/base/time_posix.cc @@ -228,6 +228,34 @@ TimeTicks TimeTicks::HighResNow() { return Now(); } +#if defined(OS_POSIX) && defined(CLOCK_SYSTEM_TRACE) + +// static +TimeTicks TimeTicks::NowFromSystemTraceTime() { + uint64_t absolute_micro; + + struct timespec ts; + if (clock_gettime(CLOCK_SYSTEM_TRACE, &ts) != 0) { + NOTREACHED() << "clock_gettime(CLOCK_SYSTEM_TRACE) failed."; + return HighResNow(); + } + + absolute_micro = + (static_cast<int64>(ts.tv_sec) * Time::kMicrosecondsPerSecond) + + (static_cast<int64>(ts.tv_nsec) / Time::kNanosecondsPerMicrosecond); + + return TimeTicks(absolute_micro); +} + +#else // !(defined(OS_POSIX) && defined(CLOCK_SYSTEM_TRACE)) + +// static +TimeTicks TimeTicks::NowFromSystemTraceTime() { + return HighResNow(); +} + +#endif // defined(OS_POSIX) && defined(CLOCK_SYSTEM_TRACE) + #endif // !OS_MACOSX struct timeval Time::ToTimeVal() const { |