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