summaryrefslogtreecommitdiffstats
path: root/lldb/tools/lldb-perf/lib/Measurement.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/tools/lldb-perf/lib/Measurement.h')
-rw-r--r--lldb/tools/lldb-perf/lib/Measurement.h53
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__) */
OpenPOWER on IntegriCloud