summaryrefslogtreecommitdiffstats
path: root/base/time_posix.cc
diff options
context:
space:
mode:
authorsleffler@chromium.org <sleffler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-01 20:56:43 +0000
committersleffler@chromium.org <sleffler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-01 20:56:43 +0000
commit190f13f73accbebd0e715c9f09db2f1c42b582ca (patch)
tree64cc444f1864f9a1cd1c81c6bb05940592883d88 /base/time_posix.cc
parent2883287341c88da630585e227dbd94c624258cf9 (diff)
downloadchromium_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.cc28
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 {