blob: 5f17bea9a21524a90ee6902f3b5df7ea3f1f3a3f [file] [log] [blame]
Greg Clayton5dbe5d42013-03-21 03:39:51 +00001//===-- Metric.cpp ----------------------------------------------*- C++ -*-===//
Enrico Granataf58cece2013-03-08 20:29:13 +00002//
Greg Clayton5dbe5d42013-03-21 03:39:51 +00003// The LLVM Compiler Infrastructure
Enrico Granataf58cece2013-03-08 20:29:13 +00004//
Greg Clayton5dbe5d42013-03-21 03:39:51 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Enrico Granataf58cece2013-03-08 20:29:13 +00007//
Greg Clayton5dbe5d42013-03-21 03:39:51 +00008//===----------------------------------------------------------------------===//
Enrico Granataf58cece2013-03-08 20:29:13 +00009
10#include "Metric.h"
11
12#include "CFCMutableArray.h"
13#include "CFCMutableDictionary.h"
14#include "CFCString.h"
Enrico Granataf3fb83a2013-03-20 21:18:20 +000015#include "MemoryGauge.h"
Enrico Granataf58cece2013-03-08 20:29:13 +000016
Greg Clayton7b8f7382013-03-18 22:34:00 +000017using namespace lldb_perf;
Enrico Granataf58cece2013-03-08 20:29:13 +000018
19template <class T>
20Metric<T>::Metric () : Metric ("")
21{}
22
23template <class T>
Enrico Granata86910572013-03-14 19:00:42 +000024Metric<T>::Metric (const char* n, const char* d) :
Enrico Granataf58cece2013-03-08 20:29:13 +000025m_name(n ? n : ""),
Enrico Granata86910572013-03-14 19:00:42 +000026m_description(d ? d : ""),
Enrico Granataf58cece2013-03-08 20:29:13 +000027m_dataset ()
28{}
29
30template <class T>
31void
Greg Claytonef0d2142013-03-21 03:32:24 +000032Metric<T>::Append (T v)
Enrico Granataf58cece2013-03-08 20:29:13 +000033{
34 m_dataset.push_back(v);
35}
36
37template <class T>
38size_t
Greg Claytonef0d2142013-03-21 03:32:24 +000039Metric<T>::GetCount () const
Enrico Granataf58cece2013-03-08 20:29:13 +000040{
41 return m_dataset.size();
42}
43
44template <class T>
45T
Greg Claytonef0d2142013-03-21 03:32:24 +000046Metric<T>::GetSum () const
Enrico Granataf58cece2013-03-08 20:29:13 +000047{
48 T sum = 0;
49 for (auto v : m_dataset)
50 sum += v;
51 return sum;
52}
53
54template <class T>
55T
Greg Claytonef0d2142013-03-21 03:32:24 +000056Metric<T>::GetAverage () const
Enrico Granataf58cece2013-03-08 20:29:13 +000057{
Greg Claytonef0d2142013-03-21 03:32:24 +000058 return GetSum()/GetCount();
Enrico Granata86910572013-03-14 19:00:42 +000059}
60
Enrico Granataf3fb83a2013-03-20 21:18:20 +000061template <>
62void Metric<double>::WriteImpl (CFCMutableArray& parent, identity<double>)
Enrico Granataf58cece2013-03-08 20:29:13 +000063{
64 CFCMutableDictionary dict;
Greg Claytonef0d2142013-03-21 03:32:24 +000065 dict.AddValueCString(CFCString("name").get(), GetName(), true);
66 dict.AddValueCString(CFCString("description").get(),GetDescription(), true);
67 dict.AddValueDouble(CFCString("value").get(),this->GetAverage(), true);
Enrico Granataf58cece2013-03-08 20:29:13 +000068 parent.AppendValue(dict.get(), true);
69}
70
Enrico Granataf3fb83a2013-03-20 21:18:20 +000071template <>
72void Metric<MemoryStats>::WriteImpl (CFCMutableArray& parent, identity<MemoryStats>)
Enrico Granataf58cece2013-03-08 20:29:13 +000073{
74 CFCMutableDictionary dict;
Greg Claytonef0d2142013-03-21 03:32:24 +000075 dict.AddValueCString(CFCString("name").get(), GetName(), true);
76 dict.AddValueCString(CFCString("description").get(), GetDescription(), true);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000077 CFCMutableDictionary value;
78
Greg Claytonef0d2142013-03-21 03:32:24 +000079 auto avg = this->GetAverage();
Enrico Granataf3fb83a2013-03-20 21:18:20 +000080
81 value.AddValueUInt64(CFCString("virtual").get(), avg.GetVirtualSize(), true);
82 value.AddValueUInt64(CFCString("resident").get(), avg.GetResidentSize(), true);
83 value.AddValueUInt64(CFCString("max_resident").get(), avg.GetMaxResidentSize(), true);
84
Greg Claytonef0d2142013-03-21 03:32:24 +000085 dict.AddValue(CFCString("value").get(), value.get(), true);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000086
Enrico Granataf58cece2013-03-08 20:29:13 +000087 parent.AppendValue(dict.get(), true);
88}
89
Greg Clayton7b8f7382013-03-18 22:34:00 +000090template class lldb_perf::Metric<double>;
Enrico Granataf3fb83a2013-03-20 21:18:20 +000091template class lldb_perf::Metric<MemoryStats>;