Timer.cpp revision 9de4dec874148d30cc1d4c498d38cd048a8164ca
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 139de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include "CFCMutableDictionary.h" 149de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include "CFCString.h" 159de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton 16af222500aa2ce2b18149277e561cdf75f2115df2Greg Claytonusing namespace lldb_perf; 17f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 1875fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::TimeType 1975fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::Now () 20f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 21f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata return high_resolution_clock::now(); 22f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 23f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 24f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico GranataTimeGauge::TimeGauge () : 259de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton m_start(), 2675fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_state(TimeGauge::State::eNeverUsed) 27f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 28f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 29f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 30f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatavoid 3175fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::Start () 32f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 3375fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_state = TimeGauge::State::eCounting; 3475fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_start = Now(); 35f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 36f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 37f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatadouble 3875fc5a74d95804e2ddc87bcade177640521147e0Greg ClaytonTimeGauge::Stop () 39f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 409de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton m_stop = Now(); 4175fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton assert(m_state == TimeGauge::State::eCounting && "cannot stop a non-started clock"); 4275fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton m_state = TimeGauge::State::eStopped; 439de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton m_delta = duration_cast<duration<double>>(m_stop-m_start).count(); 449de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return m_delta; 459de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton} 469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton 479de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytondouble 489de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonTimeGauge::GetStartValue () const 499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton{ 509de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return (double)m_start.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den; 519de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton} 529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton 539de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytondouble 549de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonTimeGauge::GetStopValue () const 559de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton{ 569de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return (double)m_stop.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den; 57f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 58f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata 59f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatadouble 609de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonTimeGauge::GetDeltaValue () const 61f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{ 6275fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton assert(m_state == TimeGauge::State::eStopped && "clock must be used before you can evaluate it"); 639de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton return m_delta; 64f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} 65