1d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===-- Timer.cpp -----------------------------------------------*- C++ -*-===// 2f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata// 3d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// The LLVM Compiler Infrastructure 4f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata// 5d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// This file is distributed under the University of Illinois Open Source 6d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// License. See LICENSE.TXT for details. 7f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata// 8d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===----------------------------------------------------------------------===// 9f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 10f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include "Timer.h" 11f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <assert.h> 12f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 13af222500aa2ce2b18149277e561cdf75f2115df2Greg Claytonusing namespace lldb_perf; 14f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 1575fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::TimeType 1675fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::Now () 17f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 18f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata return high_resolution_clock::now(); 19f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 20f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 21f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico GranataTimeGauge::TimeGauge () : 229de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton m_start(), 2375fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_state(TimeGauge::State::eNeverUsed) 24f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 25f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 26f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 27f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatavoid 2875fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::Start () 29f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 3075fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_state = TimeGauge::State::eCounting; 3175fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_start = Now(); 32f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 33f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 34f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatadouble 3575fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::Stop () 36f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 379de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton m_stop = Now(); 3875fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton assert(m_state == TimeGauge::State::eCounting && "cannot stop a non-started clock"); 3975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_state = TimeGauge::State::eStopped; 409de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton m_delta = duration_cast<duration<double>>(m_stop-m_start).count(); 419de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return m_delta; 429de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton} 439de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton 449de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytondouble 459de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonTimeGauge::GetStartValue () const 469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton{ 479de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return (double)m_start.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den; 489de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton} 499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton 509de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytondouble 519de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonTimeGauge::GetStopValue () const 529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton{ 539de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return (double)m_stop.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den; 54f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 55f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 56f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatadouble 579de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonTimeGauge::GetDeltaValue () const 58f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 5975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton assert(m_state == TimeGauge::State::eStopped && "clock must be used before you can evaluate it"); 609de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return m_delta; 61f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 62