Enabling metrics to calculate (and dump) their standard deviation

llvm-svn: 178580
diff --git a/lldb/tools/lldb-perf/lib/Metric.cpp b/lldb/tools/lldb-perf/lib/Metric.cpp
index 8bb306b..d8e7935 100644
--- a/lldb/tools/lldb-perf/lib/Metric.cpp
+++ b/lldb/tools/lldb-perf/lib/Metric.cpp
@@ -9,6 +9,7 @@
 
 #include "Metric.h"
 #include "MemoryGauge.h"
+#include <cmath>
 
 using namespace lldb_perf;
 
@@ -56,5 +57,18 @@
     return GetSum()/GetCount();
 }
 
+template <class T>
+T
+Metric<T>::GetStandardDeviation () const
+{
+    T average = GetAverage();
+    T diff_squared = 0;
+    size_t count = GetCount();
+    for (auto v : m_dataset)
+        diff_squared = diff_squared + ( (v-average)*(v-average) );
+    diff_squared = diff_squared / count;
+    return sqrt(diff_squared);
+}
+
 template class lldb_perf::Metric<double>;
 template class lldb_perf::Metric<MemoryStats>;