Metric.h revision c50fc4b658c46ef43b1add131391ecdd1f9bd752
1f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//
2f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//  Metric.h
3f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//  PerfTestDriver
4f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//
5f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//  Created by Enrico Granata on 3/7/13.
6f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//  Copyright (c) 2013 Apple Inc. All rights reserved.
7f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//
8f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
9f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#ifndef __PerfTestDriver__Metric__
10f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#define __PerfTestDriver__Metric__
11f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
12f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <vector>
13f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <string>
14f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <mach/task_info.h>
15f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
16f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include "CFCMutableArray.h"
17f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
18f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatanamespace lldb { namespace perf
19f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{
20f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granataclass WriteToPList
21f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{
22f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatapublic:
23f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    virtual void
24f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    Write (CFCMutableArray& parent) = 0;
25f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
26f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    virtual
27f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    ~WriteToPList () {}
28f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata};
29f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
30f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatatemplate <class ValueType>
31f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granataclass Metric : public WriteToPList {
32f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatapublic:
33f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    Metric ();
34c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    Metric (const char*, const char* = NULL);
35f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
36f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    void
37f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    append (ValueType v);
38f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
39f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    size_t
40f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    count ();
41f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
42f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    ValueType
43f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    sum ();
44f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
45f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    ValueType
46f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    average ();
47f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
48f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    const char*
49f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    name ();
50f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
51c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    const char*
52c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    description ();
53c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
54f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    virtual void
55f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    Write (CFCMutableArray& parent)
56f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    {
57f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata        WriteImpl(parent, identity<ValueType>());
58f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    }
59f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
60f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granataprivate:
61f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
62f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    template<typename T>
63f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    struct identity { typedef T type; };
64f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
65f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    void WriteImpl (CFCMutableArray& parent, identity<double>);
66f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
67f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    void WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>);
68f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
69f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    std::string m_name;
70c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    std::string m_description;
71f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    std::vector<ValueType> m_dataset;
72f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata};
73f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata} }
74f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
75f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#endif /* defined(__PerfTestDriver__Metric__) */
76