blob: ba56c033c154731296bbf55e4639ee61257cfe0e [file] [log] [blame]
Enrico Granataf58cece2013-03-08 20:29:13 +00001//
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
Greg Clayton7b8f7382013-03-18 22:34:00 +000015using namespace lldb_perf;
Enrico Granataf58cece2013-03-08 20:29:13 +000016
17template <class T>
18Metric<T>::Metric () : Metric ("")
19{}
20
21template <class T>
Enrico Granata86910572013-03-14 19:00:42 +000022Metric<T>::Metric (const char* n, const char* d) :
Enrico Granataf58cece2013-03-08 20:29:13 +000023m_name(n ? n : ""),
Enrico Granata86910572013-03-14 19:00:42 +000024m_description(d ? d : ""),
Enrico Granataf58cece2013-03-08 20:29:13 +000025m_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>
Enrico Granata86910572013-03-14 19:00:42 +000067const char*
68Metric<T>::description ()
69{
70 return m_description.c_str();
71}
72
73template <class T>
Enrico Granataf58cece2013-03-08 20:29:13 +000074void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<double>)
75{
76 CFCMutableDictionary dict;
Enrico Granata86910572013-03-14 19:00:42 +000077 dict.AddValueCString(CFCString("name").get(),name(), true);
78 dict.AddValueCString(CFCString("description").get(),description(), true);
Enrico Granataf58cece2013-03-08 20:29:13 +000079 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;
Enrico Granata86910572013-03-14 19:00:42 +000087 dict.AddValueCString(CFCString("name").get(),name(), true);
88 dict.AddValueCString(CFCString("description").get(),description(), true);
Enrico Granataf58cece2013-03-08 20:29:13 +000089 dict.AddValueUInt64(CFCString("value").get(),this->average(), true);
90 parent.AppendValue(dict.get(), true);
91}
92
Greg Clayton7b8f7382013-03-18 22:34:00 +000093template class lldb_perf::Metric<double>;
94template class lldb_perf::Metric<mach_vm_size_t>;