| //===-- 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; | 
 | } |