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