Get absolute time from timers
Independent of start()/stop()/getElapsedTime() functionality,
getAbsoluteTime() is added to return the time regardless of whether the
timer is running.
Bug: angleproject:2908
Change-Id: I056aeb6eddfba8757a139934c1cf68e00e860de6
Reviewed-on: https://chromium-review.googlesource.com/c/1296952
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/util/linux/LinuxTimer.cpp b/util/linux/LinuxTimer.cpp
index 1968205..e9067e3 100644
--- a/util/linux/LinuxTimer.cpp
+++ b/util/linux/LinuxTimer.cpp
@@ -14,33 +14,46 @@
{
}
+namespace
+{
+uint64_t getCurrentTimeNs()
+{
+ struct timespec currentTime;
+ clock_gettime(CLOCK_MONOTONIC, ¤tTime);
+ return currentTime.tv_sec * 1'000'000'000llu + currentTime.tv_nsec;
+}
+} // anonymous namespace
+
void LinuxTimer::start()
{
- clock_gettime(CLOCK_MONOTONIC, &mStartTime);
+ mStartTimeNs = getCurrentTimeNs();
mRunning = true;
}
void LinuxTimer::stop()
{
- clock_gettime(CLOCK_MONOTONIC, &mStopTime);
+ mStopTimeNs = getCurrentTimeNs();
mRunning = false;
}
double LinuxTimer::getElapsedTime() const
{
- struct timespec endTime;
+ uint64_t endTimeNs;
if (mRunning)
{
- clock_gettime(CLOCK_MONOTONIC, &endTime);
+ endTimeNs = getCurrentTimeNs();
}
else
{
- endTime = mStopTime;
+ endTimeNs = mStopTimeNs;
}
- double startSeconds = mStartTime.tv_sec + (1.0 / 1000000000) * mStartTime.tv_nsec;
- double endSeconds = endTime.tv_sec + (1.0 / 1000000000) * endTime.tv_nsec;
- return endSeconds - startSeconds;
+ return (endTimeNs - mStartTimeNs) * 1e-9;
+}
+
+double LinuxTimer::getAbsoluteTime()
+{
+ return getCurrentTimeNs() * 1e-9;
}
Timer *CreateTimer()