// // Measurement.h // PerfTestDriver // // Created by Enrico Granata on 3/7/13. // Copyright (c) 2013 Apple Inc. All rights reserved. // #ifndef __PerfTestDriver__Measurement__ #define __PerfTestDriver__Measurement__ #include "Gauge.h" #include "Timer.h" #include "Metric.h" #include "MemoryGauge.h" namespace lldb_perf { template class Measurement : public WriteToPList { public: Measurement () {} Measurement (Action act, const char* name = NULL, const char* descr = NULL) : m_action (act), m_metric (Metric(name,descr)) {} template Measurement (const Measurement& rhs) : m_action(rhs.action()), m_metric(rhs.metric()) { } template void operator () (Args... args) { GaugeType gauge; m_metric.append (gauge.gauge(m_action,args...)); } virtual const Metric& metric () const { return m_metric; } virtual const Action& action () const { return m_action; } virtual void Write (CFCMutableArray& parent) { m_metric.Write(parent); } protected: Action m_action; Metric m_metric; }; template class TimeMeasurement : public Measurement { public: TimeMeasurement () : Measurement () {} TimeMeasurement (Action act, const char* name = NULL, const char* descr = NULL) : Measurement (act, name, descr) {} template TimeMeasurement (const TimeMeasurement& rhs) : Measurement(rhs) {} template TimeMeasurement (const Measurement& rhs) : Measurement(rhs) {} template void operator () (Args... args) { Measurement::operator()(args...); } }; template class MemoryMeasurement : public Measurement { public: MemoryMeasurement () : Measurement () {} MemoryMeasurement (Action act, const char* name = NULL, const char* descr = NULL) : Measurement (act, name, descr) {} template MemoryMeasurement (const MemoryMeasurement& rhs) : Measurement(rhs) {} template MemoryMeasurement (const Measurement& rhs) : Measurement(rhs) {} template void operator () (Args... args) { Measurement::operator()(args...); } }; } #endif /* defined(__PerfTestDriver__Measurement__) */