diff options
Diffstat (limited to 'lldb/tools/lldb-perf/lib/Measurement.h')
-rw-r--r-- | lldb/tools/lldb-perf/lib/Measurement.h | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/lldb/tools/lldb-perf/lib/Measurement.h b/lldb/tools/lldb-perf/lib/Measurement.h index 0697b0fe30f..4623bdf8f6f 100644 --- a/lldb/tools/lldb-perf/lib/Measurement.h +++ b/lldb/tools/lldb-perf/lib/Measurement.h @@ -10,6 +10,7 @@ #define __PerfTestDriver__Measurement__ #include "Gauge.h" +#include "Timer.h" #include "Metric.h" namespace lldb { namespace perf @@ -18,10 +19,19 @@ template <typename GaugeType, typename Action> class Measurement : public WriteToPList { public: - Measurement (Action act, const char* name = NULL) : + Measurement () {} + + Measurement (Action act, const char* name = NULL, const char* descr = NULL) : m_action (act), - m_metric (Metric<typename GaugeType::SizeType>(name)) + m_metric (Metric<typename GaugeType::SizeType>(name,descr)) {} + + template <typename GaugeType_Rhs, typename Action_Rhs> + Measurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) : + m_action(rhs.action()), + m_metric(rhs.metric()) + { + } template <typename... Args> void @@ -31,22 +41,55 @@ public: m_metric.append (gauge.gauge(m_action,args...)); } - Metric<typename GaugeType::SizeType> - metric () + virtual const Metric<typename GaugeType::SizeType>& + metric () const { return m_metric; } + virtual const Action& + action () const + { + return m_action; + } + virtual void Write (CFCMutableArray& parent) { m_metric.Write(parent); } -private: +protected: Action m_action; Metric<typename GaugeType::SizeType> m_metric; }; + +template <typename Action> +class TimeMeasurement : public Measurement<TimeGauge,Action> +{ +public: + TimeMeasurement () : Measurement<TimeGauge,Action> () + {} + + TimeMeasurement (Action act, const char* name = NULL, const char* descr = NULL) : Measurement<TimeGauge,Action> (act, name, descr) + {} + + template <typename Action_Rhs> + TimeMeasurement (const TimeMeasurement<Action_Rhs>& rhs) : Measurement<TimeGauge,Action>(rhs) + {} + + template <typename GaugeType_Rhs, typename Action_Rhs> + TimeMeasurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) : Measurement<GaugeType_Rhs,Action_Rhs>(rhs) + {} + + template <typename... Args> + void + operator () (Args... args) + { + Measurement<TimeGauge,Action>::operator()(args...); + } +}; + } } #endif /* defined(__PerfTestDriver__Measurement__) */ |