1//===-- Metric.h ------------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef __PerfTestDriver__Metric__
11#define __PerfTestDriver__Metric__
12
13#include <vector>
14#include <string>
15#include <mach/task_info.h>
16
17namespace lldb_perf {
18
19class MemoryStats;
20
21template <class ValueType>
22class Metric
23{
24public:
25    enum class StandardDeviationMode
26    {
27        eSample,
28        ePopulation
29    };
30
31    Metric ();
32    Metric (const char*, const char* = NULL);
33
34    void
35    Append (ValueType v);
36
37    ValueType
38    GetAverage () const;
39
40    size_t
41    GetCount () const;
42
43    ValueType
44    GetSum () const;
45
46    ValueType
47    GetStandardDeviation (StandardDeviationMode mode = StandardDeviationMode::ePopulation) const;
48
49    const char*
50    GetName () const
51    {
52        if (m_name.empty())
53            return NULL;
54        return m_name.c_str();
55    }
56
57    const char*
58    GetDescription () const
59    {
60        if (m_description.empty())
61            return NULL;
62        return m_description.c_str();
63    }
64
65private:
66    std::string m_name;
67    std::string m_description;
68    std::vector<ValueType> m_dataset;
69};
70}
71
72#endif /* defined(__PerfTestDriver__Metric__) */
73