Metric.cpp revision af222500aa2ce2b18149277e561cdf75f2115df2
1//
2//  Metric.cpp
3//  PerfTestDriver
4//
5//  Created by Enrico Granata on 3/7/13.
6//  Copyright (c) 2013 Apple Inc. All rights reserved.
7//
8
9#include "Metric.h"
10
11#include "CFCMutableArray.h"
12#include "CFCMutableDictionary.h"
13#include "CFCString.h"
14
15using namespace lldb_perf;
16
17template <class T>
18Metric<T>::Metric () : Metric ("")
19{}
20
21template <class T>
22Metric<T>::Metric (const char* n, const char* d) :
23m_name(n ? n : ""),
24m_description(d ? d : ""),
25m_dataset ()
26{}
27
28template <class T>
29void
30Metric<T>::append (T v)
31{
32    m_dataset.push_back(v);
33}
34
35template <class T>
36size_t
37Metric<T>::count ()
38{
39    return m_dataset.size();
40}
41
42template <class T>
43T
44Metric<T>::sum ()
45{
46    T sum = 0;
47    for (auto v : m_dataset)
48        sum += v;
49    return sum;
50}
51
52template <class T>
53T
54Metric<T>::average ()
55{
56    return sum()/count();
57}
58
59template <class T>
60const char*
61Metric<T>::name ()
62{
63    return m_name.c_str();
64}
65
66template <class T>
67const char*
68Metric<T>::description ()
69{
70    return m_description.c_str();
71}
72
73template <class T>
74void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<double>)
75{
76    CFCMutableDictionary dict;
77    dict.AddValueCString(CFCString("name").get(),name(), true);
78    dict.AddValueCString(CFCString("description").get(),description(), true);
79    dict.AddValueDouble(CFCString("value").get(),this->average(), true);
80    parent.AppendValue(dict.get(), true);
81}
82
83template <class T>
84void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>)
85{
86    CFCMutableDictionary dict;
87    dict.AddValueCString(CFCString("name").get(),name(), true);
88    dict.AddValueCString(CFCString("description").get(),description(), true);
89    dict.AddValueUInt64(CFCString("value").get(),this->average(), true);
90    parent.AppendValue(dict.get(), true);
91}
92
93template class lldb_perf::Metric<double>;
94template class lldb_perf::Metric<mach_vm_size_t>;
95