1//===-- Timer.cpp -----------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "Timer.h"
11#include <assert.h>
12
13using namespace lldb_perf;
14
15TimeGauge::TimeType
16TimeGauge::Now ()
17{
18	return high_resolution_clock::now();
19}
20
21TimeGauge::TimeGauge () :
22    m_start(),
23    m_state(TimeGauge::State::eNeverUsed)
24{
25}
26
27void
28TimeGauge::Start ()
29{
30	m_state = TimeGauge::State::eCounting;
31	m_start = Now();
32}
33
34double
35TimeGauge::Stop ()
36{
37	m_stop = Now();
38	assert(m_state == TimeGauge::State::eCounting && "cannot stop a non-started clock");
39	m_state = TimeGauge::State::eStopped;
40    m_delta = duration_cast<duration<double>>(m_stop-m_start).count();
41	return m_delta;
42}
43
44double
45TimeGauge::GetStartValue () const
46{
47    return (double)m_start.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den;
48}
49
50double
51TimeGauge::GetStopValue () const
52{
53    return (double)m_stop.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den;
54}
55
56double
57TimeGauge::GetDeltaValue () const
58{
59	assert(m_state == TimeGauge::State::eStopped && "clock must be used before you can evaluate it");
60	return m_delta;
61}
62