From 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 6 Jan 2016 20:12:03 +0000 Subject: Vendor import of lldb trunk r256945: https://llvm.org/svn/llvm-project/lldb/trunk@256945 --- tools/lldb-perf/lib/Metric.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 tools/lldb-perf/lib/Metric.cpp (limited to 'tools/lldb-perf/lib/Metric.cpp') diff --git a/tools/lldb-perf/lib/Metric.cpp b/tools/lldb-perf/lib/Metric.cpp new file mode 100644 index 000000000000..1951cdb0250a --- /dev/null +++ b/tools/lldb-perf/lib/Metric.cpp @@ -0,0 +1,85 @@ +//===-- Metric.cpp ----------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "Metric.h" +#include "MemoryGauge.h" +#include + +using namespace lldb_perf; + +template +Metric::Metric () : Metric ("") +{ +} + +template +Metric::Metric (const char* n, const char* d) : + m_name(n ? n : ""), + m_description(d ? d : ""), + m_dataset () +{ +} + +template +void +Metric::Append (T v) +{ + m_dataset.push_back(v); +} + +template +size_t +Metric::GetCount () const +{ + return m_dataset.size(); +} + +template +T +Metric::GetSum () const +{ + T sum = 0; + for (auto v : m_dataset) + sum += v; + return sum; +} + +template +T +Metric::GetAverage () const +{ + return GetSum()/GetCount(); +} + + +// Knuth's algorithm for stddev - massive cancellation resistant +template +T +Metric::GetStandardDeviation (StandardDeviationMode mode) const +{ + size_t n = 0; + T mean = 0; + T M2 = 0; + for (auto x : m_dataset) + { + n = n + 1; + T delta = x - mean; + mean = mean + delta/n; + M2 = M2+delta*(x-mean); + } + T variance; + if (mode == StandardDeviationMode::ePopulation || n == 1) + variance = M2 / n; + else + variance = M2 / (n - 1); + return sqrt(variance); +} + +template class lldb_perf::Metric; +template class lldb_perf::Metric; -- cgit v1.2.3