diff options
Diffstat (limited to 'tools/lldb-perf/lib/Timer.cpp')
-rw-r--r-- | tools/lldb-perf/lib/Timer.cpp | 61 |
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; +} |