Metric.cpp revision 53bba61c0b9f3b3ceff5835f79d61efa0d81847c
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#include "MemoryGauge.h" 15 16using namespace lldb_perf; 17 18template <class T> 19Metric<T>::Metric () : Metric ("") 20{} 21 22template <class T> 23Metric<T>::Metric (const char* n, const char* d) : 24m_name(n ? n : ""), 25m_description(d ? d : ""), 26m_dataset () 27{} 28 29template <class T> 30void 31Metric<T>::append (T v) 32{ 33 m_dataset.push_back(v); 34} 35 36template <class T> 37size_t 38Metric<T>::count () 39{ 40 return m_dataset.size(); 41} 42 43template <class T> 44T 45Metric<T>::sum () 46{ 47 T sum = 0; 48 for (auto v : m_dataset) 49 sum += v; 50 return sum; 51} 52 53template <class T> 54T 55Metric<T>::average () 56{ 57 return sum()/count(); 58} 59 60template <class T> 61const char* 62Metric<T>::name () 63{ 64 return m_name.c_str(); 65} 66 67template <class T> 68const char* 69Metric<T>::description () 70{ 71 return m_description.c_str(); 72} 73 74template <> 75void Metric<double>::WriteImpl (CFCMutableArray& parent, identity<double>) 76{ 77 CFCMutableDictionary dict; 78 dict.AddValueCString(CFCString("name").get(),name(), true); 79 dict.AddValueCString(CFCString("description").get(),description(), true); 80 dict.AddValueDouble(CFCString("value").get(),this->average(), true); 81 parent.AppendValue(dict.get(), true); 82} 83 84template <> 85void Metric<MemoryStats>::WriteImpl (CFCMutableArray& parent, identity<MemoryStats>) 86{ 87 CFCMutableDictionary dict; 88 dict.AddValueCString(CFCString("name").get(),name(), true); 89 dict.AddValueCString(CFCString("description").get(),description(), true); 90 CFCMutableDictionary value; 91 92 auto avg = this->average(); 93 94 value.AddValueUInt64(CFCString("virtual").get(), avg.GetVirtualSize(), true); 95 value.AddValueUInt64(CFCString("resident").get(), avg.GetResidentSize(), true); 96 value.AddValueUInt64(CFCString("max_resident").get(), avg.GetMaxResidentSize(), true); 97 98 dict.AddValue(CFCString("value").get(),value.get(), true); 99 100 parent.AppendValue(dict.get(), true); 101} 102 103template class lldb_perf::Metric<double>; 104template class lldb_perf::Metric<MemoryStats>; 105