Measurement.h revision f5af85a2946ed4e1ff4766829d328cfb4961f259
1//
2//  Measurement.h
3//  PerfTestDriver
4//
5//  Created by Enrico Granata on 3/7/13.
6//  Copyright (c) 2013 Apple Inc. All rights reserved.
7//
8
9#ifndef __PerfTestDriver__Measurement__
10#define __PerfTestDriver__Measurement__
11
12#include "Gauge.h"
13#include "Metric.h"
14
15namespace lldb { namespace perf
16{
17template <typename GaugeType, typename Action>
18class Measurement : public WriteToPList
19{
20public:
21    Measurement (Action act, const char* name = NULL)  :
22    m_action (act),
23    m_metric (Metric<typename GaugeType::SizeType>(name))
24    {}
25
26    template <typename... Args>
27    void
28    operator () (Args... args)
29    {
30        GaugeType gauge;
31        m_metric.append (gauge.gauge(m_action,args...));
32    }
33
34    Metric<typename GaugeType::SizeType>
35    metric ()
36    {
37        return m_metric;
38    }
39
40    virtual void
41    Write (CFCMutableArray& parent)
42    {
43        m_metric.Write(parent);
44    }
45
46private:
47    Action m_action;
48    Metric<typename GaugeType::SizeType> m_metric;
49};
50} }
51
52#endif /* defined(__PerfTestDriver__Measurement__) */
53