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