blob: df8a243b1ccb1a650fa25dfbf87eb895085b3a2e [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"
Enrico Granataf3fb83a2013-03-20 21:18:20 +000014#include "MemoryGauge.h"
Enrico Granataf58cece2013-03-08 20:29:13 +000015
Greg Clayton7b8f7382013-03-18 22:34:00 +000016using namespace lldb_perf;
Enrico Granataf58cece2013-03-08 20:29:13 +000017
18template <class T>
19Metric<T>::Metric () : Metric ("")
20{}
21
22template <class T>
Enrico Granata86910572013-03-14 19:00:42 +000023Metric<T>::Metric (const char* n, const char* d) :
Enrico Granataf58cece2013-03-08 20:29:13 +000024m_name(n ? n : ""),
Enrico Granata86910572013-03-14 19:00:42 +000025m_description(d ? d : ""),
Enrico Granataf58cece2013-03-08 20:29:13 +000026m_dataset ()
27{}
28
29template <class T>
30void
Greg Claytonef0d2142013-03-21 03:32:24 +000031Metric<T>::Append (T v)
Enrico Granataf58cece2013-03-08 20:29:13 +000032{
33 m_dataset.push_back(v);
34}
35
36template <class T>
37size_t
Greg Claytonef0d2142013-03-21 03:32:24 +000038Metric<T>::GetCount () const
Enrico Granataf58cece2013-03-08 20:29:13 +000039{
40 return m_dataset.size();
41}
42
43template <class T>
44T
Greg Claytonef0d2142013-03-21 03:32:24 +000045Metric<T>::GetSum () const
Enrico Granataf58cece2013-03-08 20:29:13 +000046{
47 T sum = 0;
48 for (auto v : m_dataset)
49 sum += v;
50 return sum;
51}
52
53template <class T>
54T
Greg Claytonef0d2142013-03-21 03:32:24 +000055Metric<T>::GetAverage () const
Enrico Granataf58cece2013-03-08 20:29:13 +000056{
Greg Claytonef0d2142013-03-21 03:32:24 +000057 return GetSum()/GetCount();
Enrico Granata86910572013-03-14 19:00:42 +000058}
59
Enrico Granataf3fb83a2013-03-20 21:18:20 +000060template <>
61void Metric<double>::WriteImpl (CFCMutableArray& parent, identity<double>)
Enrico Granataf58cece2013-03-08 20:29:13 +000062{
63 CFCMutableDictionary dict;
Greg Claytonef0d2142013-03-21 03:32:24 +000064 dict.AddValueCString(CFCString("name").get(), GetName(), true);
65 dict.AddValueCString(CFCString("description").get(),GetDescription(), true);
66 dict.AddValueDouble(CFCString("value").get(),this->GetAverage(), true);
Enrico Granataf58cece2013-03-08 20:29:13 +000067 parent.AppendValue(dict.get(), true);
68}
69
Enrico Granataf3fb83a2013-03-20 21:18:20 +000070template <>
71void Metric<MemoryStats>::WriteImpl (CFCMutableArray& parent, identity<MemoryStats>)
Enrico Granataf58cece2013-03-08 20:29:13 +000072{
73 CFCMutableDictionary dict;
Greg Claytonef0d2142013-03-21 03:32:24 +000074 dict.AddValueCString(CFCString("name").get(), GetName(), true);
75 dict.AddValueCString(CFCString("description").get(), GetDescription(), true);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000076 CFCMutableDictionary value;
77
Greg Claytonef0d2142013-03-21 03:32:24 +000078 auto avg = this->GetAverage();
Enrico Granataf3fb83a2013-03-20 21:18:20 +000079
80 value.AddValueUInt64(CFCString("virtual").get(), avg.GetVirtualSize(), true);
81 value.AddValueUInt64(CFCString("resident").get(), avg.GetResidentSize(), true);
82 value.AddValueUInt64(CFCString("max_resident").get(), avg.GetMaxResidentSize(), true);
83
Greg Claytonef0d2142013-03-21 03:32:24 +000084 dict.AddValue(CFCString("value").get(), value.get(), true);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000085
Enrico Granataf58cece2013-03-08 20:29:13 +000086 parent.AppendValue(dict.get(), true);
87}
88
Greg Clayton7b8f7382013-03-18 22:34:00 +000089template class lldb_perf::Metric<double>;
Enrico Granataf3fb83a2013-03-20 21:18:20 +000090template class lldb_perf::Metric<MemoryStats>;