summaryrefslogtreecommitdiff
path: root/tools/lldb-perf/lib/Timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-perf/lib/Timer.cpp')
-rw-r--r--tools/lldb-perf/lib/Timer.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/lldb-perf/lib/Timer.cpp b/tools/lldb-perf/lib/Timer.cpp
new file mode 100644
index 0000000000000..4bbab904c63ed
--- /dev/null
+++ b/tools/lldb-perf/lib/Timer.cpp
@@ -0,0 +1,61 @@
+//===-- Timer.cpp -----------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Timer.h"
+#include <assert.h>
+
+using namespace lldb_perf;
+
+TimeGauge::TimeType
+TimeGauge::Now ()
+{
+ return high_resolution_clock::now();
+}
+
+TimeGauge::TimeGauge () :
+ m_start(),
+ m_state(TimeGauge::State::eNeverUsed)
+{
+}
+
+void
+TimeGauge::Start ()
+{
+ m_state = TimeGauge::State::eCounting;
+ m_start = Now();
+}
+
+double
+TimeGauge::Stop ()
+{
+ m_stop = Now();
+ assert(m_state == TimeGauge::State::eCounting && "cannot stop a non-started clock");
+ m_state = TimeGauge::State::eStopped;
+ m_delta = duration_cast<duration<double>>(m_stop-m_start).count();
+ return m_delta;
+}
+
+double
+TimeGauge::GetStartValue () const
+{
+ return (double)m_start.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den;
+}
+
+double
+TimeGauge::GetStopValue () const
+{
+ return (double)m_stop.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den;
+}
+
+double
+TimeGauge::GetDeltaValue () const
+{
+ assert(m_state == TimeGauge::State::eStopped && "clock must be used before you can evaluate it");
+ return m_delta;
+}