summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/tools/lldb-perf/lib/Measurement.h7
-rw-r--r--lldb/tools/lldb-perf/lib/MemoryGauge.cpp42
-rw-r--r--lldb/tools/lldb-perf/lib/MemoryGauge.h13
-rw-r--r--lldb/tools/lldb-perf/lib/Metric.cpp14
-rw-r--r--lldb/tools/lldb-perf/lib/Metric.h3
5 files changed, 72 insertions, 7 deletions
diff --git a/lldb/tools/lldb-perf/lib/Measurement.h b/lldb/tools/lldb-perf/lib/Measurement.h
index a75bc6ff201..d43a37962f3 100644
--- a/lldb/tools/lldb-perf/lib/Measurement.h
+++ b/lldb/tools/lldb-perf/lib/Measurement.h
@@ -111,6 +111,13 @@ public:
auto metric = GetMetric ();
results.GetDictionary().Add(metric.GetName(), metric.GetDescription(), lldb_perf::GetResult<typename GaugeType::ValueType> (NULL, metric.GetAverage()));
}
+
+ void
+ WriteStandardDeviation (Results &results)
+ {
+ auto metric = GetMetric ();
+ results.GetDictionary().Add(metric.GetName(), metric.GetDescription(), lldb_perf::GetResult<typename GaugeType::ValueType> (NULL, metric.GetStandardDeviation()));
+ }
protected:
GaugeType m_gauge;
diff --git a/lldb/tools/lldb-perf/lib/MemoryGauge.cpp b/lldb/tools/lldb-perf/lib/MemoryGauge.cpp
index a53b0aca471..6e460081b27 100644
--- a/lldb/tools/lldb-perf/lib/MemoryGauge.cpp
+++ b/lldb/tools/lldb-perf/lib/MemoryGauge.cpp
@@ -9,6 +9,7 @@
#include "MemoryGauge.h"
#include <assert.h>
+#include <cmath>
#include <mach/mach.h>
#include <mach/task.h>
#include <mach/mach_traps.h>
@@ -61,13 +62,30 @@ MemoryStats::operator - (const MemoryStats& rhs)
m_max_resident_size - rhs.m_max_resident_size);
}
-MemoryStats&
+MemoryStats
+MemoryStats::operator + (const MemoryStats& rhs)
+{
+ return MemoryStats(m_virtual_size + rhs.m_virtual_size,
+ m_resident_size + rhs.m_resident_size,
+ m_max_resident_size + rhs.m_max_resident_size);
+}
+
+MemoryStats
MemoryStats::operator / (size_t n)
{
- m_virtual_size /= n;
- m_resident_size /= n;
- m_max_resident_size /= n;
- return *this;
+ MemoryStats result(*this);
+ result.m_virtual_size /= n;
+ result.m_resident_size /= n;
+ result.m_max_resident_size /= n;
+ return result;
+}
+
+MemoryStats
+MemoryStats::operator * (const MemoryStats& rhs)
+{
+ return MemoryStats(m_virtual_size * rhs.m_virtual_size,
+ m_resident_size * rhs.m_resident_size,
+ m_max_resident_size * rhs.m_max_resident_size);
}
Results::ResultSP
@@ -130,3 +148,17 @@ lldb_perf::GetResult (const char *description, MemoryStats value)
{
return value.GetResult (NULL, description);
}
+
+MemoryStats
+sqrt (const MemoryStats& arg)
+{
+ long double virt_size = arg.GetVirtualSize();
+ long double resident_size = arg.GetResidentSize();
+ long double max_resident_size = arg.GetMaxResidentSize();
+
+ virt_size = sqrtl(virt_size);
+ resident_size = sqrtl(resident_size);
+ max_resident_size = sqrtl(max_resident_size);
+
+ return MemoryStats(virt_size,resident_size,max_resident_size);
+}
diff --git a/lldb/tools/lldb-perf/lib/MemoryGauge.h b/lldb/tools/lldb-perf/lib/MemoryGauge.h
index 53f46bb4151..a1221b6b66c 100644
--- a/lldb/tools/lldb-perf/lib/MemoryGauge.h
+++ b/lldb/tools/lldb-perf/lib/MemoryGauge.h
@@ -34,9 +34,15 @@ public:
MemoryStats
operator - (const MemoryStats& rhs);
- MemoryStats&
+ MemoryStats
+ operator + (const MemoryStats& rhs);
+
+ MemoryStats
operator / (size_t rhs);
+ MemoryStats
+ operator * (const MemoryStats& rhs);
+
mach_vm_size_t
GetVirtualSize () const
{
@@ -80,7 +86,7 @@ private:
mach_vm_size_t m_resident_size;
mach_vm_size_t m_max_resident_size;
};
-
+
class MemoryGauge : public Gauge<MemoryStats>
{
public:
@@ -135,4 +141,7 @@ GetResult (const char *description, MemoryStats value);
} // namespace lldb_perf
+lldb_perf::MemoryStats
+sqrt (const lldb_perf::MemoryStats& arg);
+
#endif // #ifndef __PerfTestDriver__MemoryGauge__
diff --git a/lldb/tools/lldb-perf/lib/Metric.cpp b/lldb/tools/lldb-perf/lib/Metric.cpp
index 8bb306bb9ab..d8e7935debf 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 @@ Metric<T>::GetAverage () const
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>;
diff --git a/lldb/tools/lldb-perf/lib/Metric.h b/lldb/tools/lldb-perf/lib/Metric.h
index 3e173c69962..8c32019b21f 100644
--- a/lldb/tools/lldb-perf/lib/Metric.h
+++ b/lldb/tools/lldb-perf/lib/Metric.h
@@ -37,6 +37,9 @@ public:
ValueType
GetSum () const;
+ ValueType
+ GetStandardDeviation () const;
+
const char*
GetName () const
{
OpenPOWER on IntegriCloud