From 190f13f73accbebd0e715c9f09db2f1c42b582ca Mon Sep 17 00:00:00 2001 From: "sleffler@chromium.org" Date: Tue, 1 May 2012 20:56:43 +0000 Subject: 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 --- base/time_posix.cc | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'base/time_posix.cc') 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(ts.tv_sec) * Time::kMicrosecondsPerSecond) + + (static_cast(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 { -- cgit v1.1