diff options
Diffstat (limited to 'lldb/tools/lldb-perf/lib/Metric.cpp')
-rw-r--r-- | lldb/tools/lldb-perf/lib/Metric.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/lldb/tools/lldb-perf/lib/Metric.cpp b/lldb/tools/lldb-perf/lib/Metric.cpp new file mode 100644 index 00000000000..885413fc65a --- /dev/null +++ b/lldb/tools/lldb-perf/lib/Metric.cpp @@ -0,0 +1,84 @@ +// +// Metric.cpp +// PerfTestDriver +// +// Created by Enrico Granata on 3/7/13. +// Copyright (c) 2013 Apple Inc. All rights reserved. +// + +#include "Metric.h" + +#include "CFCMutableArray.h" +#include "CFCMutableDictionary.h" +#include "CFCString.h" + +using namespace lldb::perf; + +template <class T> +Metric<T>::Metric () : Metric ("") +{} + +template <class T> +Metric<T>::Metric (const char* n) : +m_name(n ? n : ""), +m_dataset () +{} + +template <class T> +void +Metric<T>::append (T v) +{ + m_dataset.push_back(v); +} + +template <class T> +size_t +Metric<T>::count () +{ + return m_dataset.size(); +} + +template <class T> +T +Metric<T>::sum () +{ + T sum = 0; + for (auto v : m_dataset) + sum += v; + return sum; +} + +template <class T> +T +Metric<T>::average () +{ + return sum()/count(); +} + +template <class T> +const char* +Metric<T>::name () +{ + return m_name.c_str(); +} + +template <class T> +void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<double>) +{ + CFCMutableDictionary dict; + dict.AddValueCString(CFCString("name").get(),m_name.c_str(), true); + dict.AddValueDouble(CFCString("value").get(),this->average(), true); + parent.AppendValue(dict.get(), true); +} + +template <class T> +void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>) +{ + CFCMutableDictionary dict; + dict.AddValueCString(CFCString("name").get(),m_name.c_str(), true); + dict.AddValueUInt64(CFCString("value").get(),this->average(), true); + parent.AppendValue(dict.get(), true); +} + +template class lldb::perf::Metric<double>; +template class lldb::perf::Metric<mach_vm_size_t>; |