[Lldb-commits] [lldb] r177580 - Making MemoryGauge work by fixing a Mach API call mistake - saving (and dumping) more information out of the task_info call
Enrico Granata
egranata at apple.com
Wed Mar 20 14:18:20 PDT 2013
Author: enrico
Date: Wed Mar 20 16:18:20 2013
New Revision: 177580
URL: http://llvm.org/viewvc/llvm-project?rev=177580&view=rev
Log:
Making MemoryGauge work by fixing a Mach API call mistake - saving (and dumping) more information out of the task_info call
Modified:
lldb/trunk/tools/lldb-perf/lib/Measurement.h
lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp
lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h
lldb/trunk/tools/lldb-perf/lib/Metric.cpp
lldb/trunk/tools/lldb-perf/lib/Metric.h
lldb/trunk/tools/lldb-perf/lib/TestCase.h
Modified: lldb/trunk/tools/lldb-perf/lib/Measurement.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Measurement.h?rev=177580&r1=177579&r2=177580&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Measurement.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/Measurement.h Wed Mar 20 16:18:20 2013
@@ -12,6 +12,7 @@
#include "Gauge.h"
#include "Timer.h"
#include "Metric.h"
+#include "MemoryGauge.h"
namespace lldb_perf
{
@@ -90,6 +91,32 @@ public:
}
};
+template <typename Action>
+class MemoryMeasurement : public Measurement<MemoryGauge,Action>
+{
+public:
+ MemoryMeasurement () : Measurement<MemoryGauge,Action> ()
+ {}
+
+ MemoryMeasurement (Action act, const char* name = NULL, const char* descr = NULL) : Measurement<MemoryGauge,Action> (act, name, descr)
+ {}
+
+ template <typename Action_Rhs>
+ MemoryMeasurement (const MemoryMeasurement<Action_Rhs>& rhs) : Measurement<MemoryGauge,Action>(rhs)
+ {}
+
+ template <typename GaugeType_Rhs, typename Action_Rhs>
+ MemoryMeasurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) : Measurement<GaugeType_Rhs,Action_Rhs>(rhs)
+ {}
+
+ template <typename... Args>
+ void
+ operator () (Args... args)
+ {
+ Measurement<MemoryGauge,Action>::operator()(args...);
+ }
+};
+
}
#endif /* defined(__PerfTestDriver__Measurement__) */
Modified: lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp?rev=177580&r1=177579&r2=177580&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp (original)
+++ lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp Wed Mar 20 16:18:20 2013
@@ -8,18 +8,69 @@
#include "MemoryGauge.h"
#include <assert.h>
+#include <mach/mach.h>
#include <mach/task.h>
+#include <mach/mach_traps.h>
using namespace lldb_perf;
+MemoryStats::MemoryStats () : MemoryStats(0,0,0) {}
+MemoryStats::MemoryStats (mach_vm_size_t vs,mach_vm_size_t rs, mach_vm_size_t mrs) :
+m_virtual_size(vs),
+m_resident_size(rs),
+m_max_resident_size(mrs)
+{}
+
+MemoryStats::MemoryStats (const MemoryStats& rhs) : MemoryStats(rhs.m_virtual_size,rhs.m_resident_size,rhs.m_max_resident_size)
+{}
+
+MemoryStats&
+MemoryStats::operator = (const MemoryStats& rhs)
+{
+ if (&rhs != this)
+ {
+ m_virtual_size = rhs.m_virtual_size;
+ m_resident_size = rhs.m_resident_size;
+ m_max_resident_size = rhs.m_max_resident_size;
+ }
+ return *this;
+}
+
+MemoryStats&
+MemoryStats::operator += (const MemoryStats& rhs)
+{
+ m_virtual_size += rhs.m_virtual_size;
+ m_resident_size += rhs.m_resident_size;
+ m_max_resident_size += rhs.m_max_resident_size;
+ return *this;
+}
+
+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 rhs)
+{
+ m_virtual_size /= rhs;
+ m_resident_size /= rhs;
+ m_max_resident_size /= rhs;
+ return *this;
+}
+
MemoryGauge::SizeType
MemoryGauge::now ()
{
- task_t task = MACH_PORT_NULL;
+ task_t task = mach_task_self();
mach_task_basic_info_data_t taskBasicInfo;
mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT;
- if (task_info(task, MACH_TASK_BASIC_INFO, (task_info_t) & taskBasicInfo, &count) == KERN_SUCCESS) {
- return taskBasicInfo.virtual_size;
+ auto task_info_ret = task_info(task, MACH_TASK_BASIC_INFO, (task_info_t) & taskBasicInfo, &count);
+ if (task_info_ret == KERN_SUCCESS) {
+ return MemoryStats(taskBasicInfo.virtual_size, taskBasicInfo.resident_size, taskBasicInfo.resident_size_max);
}
return 0;
}
Modified: lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h?rev=177580&r1=177579&r2=177580&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h Wed Mar 20 16:18:20 2013
@@ -15,7 +15,68 @@
namespace lldb_perf
{
-class MemoryGauge : public Gauge<mach_vm_size_t>
+class MemoryStats
+{
+public:
+ MemoryStats ();
+ MemoryStats (mach_vm_size_t,mach_vm_size_t = 0, mach_vm_size_t = 0);
+ MemoryStats (const MemoryStats& rhs);
+
+ MemoryStats&
+ operator = (const MemoryStats& rhs);
+
+ MemoryStats&
+ operator += (const MemoryStats& rhs);
+
+ MemoryStats
+ operator - (const MemoryStats& rhs);
+
+ MemoryStats&
+ operator / (size_t rhs);
+
+ mach_vm_size_t
+ GetVirtualSize ()
+ {
+ return m_virtual_size;
+ }
+
+ mach_vm_size_t
+ GetResidentSize ()
+ {
+ return m_resident_size;
+ }
+
+ mach_vm_size_t
+ GetMaxResidentSize ()
+ {
+ return m_max_resident_size;
+ }
+
+ void
+ SetVirtualSize (mach_vm_size_t vs)
+ {
+ m_virtual_size = vs;
+ }
+
+ void
+ SetResidentSize (mach_vm_size_t rs)
+ {
+ m_resident_size = rs;
+ }
+
+ void
+ SetMaxResidentSize (mach_vm_size_t mrs)
+ {
+ m_max_resident_size = mrs;
+ }
+
+private:
+ mach_vm_size_t m_virtual_size;
+ mach_vm_size_t m_resident_size;
+ mach_vm_size_t m_max_resident_size;
+};
+
+class MemoryGauge : public Gauge<MemoryStats>
{
private:
enum class State
Modified: lldb/trunk/tools/lldb-perf/lib/Metric.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Metric.cpp?rev=177580&r1=177579&r2=177580&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Metric.cpp (original)
+++ lldb/trunk/tools/lldb-perf/lib/Metric.cpp Wed Mar 20 16:18:20 2013
@@ -11,6 +11,7 @@
#include "CFCMutableArray.h"
#include "CFCMutableDictionary.h"
#include "CFCString.h"
+#include "MemoryGauge.h"
using namespace lldb_perf;
@@ -70,8 +71,8 @@ Metric<T>::description ()
return m_description.c_str();
}
-template <class T>
-void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<double>)
+template <>
+void Metric<double>::WriteImpl (CFCMutableArray& parent, identity<double>)
{
CFCMutableDictionary dict;
dict.AddValueCString(CFCString("name").get(),name(), true);
@@ -80,15 +81,24 @@ void Metric<T>::WriteImpl (CFCMutableArr
parent.AppendValue(dict.get(), true);
}
-template <class T>
-void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>)
+template <>
+void Metric<MemoryStats>::WriteImpl (CFCMutableArray& parent, identity<MemoryStats>)
{
CFCMutableDictionary dict;
dict.AddValueCString(CFCString("name").get(),name(), true);
dict.AddValueCString(CFCString("description").get(),description(), true);
- dict.AddValueUInt64(CFCString("value").get(),this->average(), true);
+ CFCMutableDictionary value;
+
+ auto avg = this->average();
+
+ value.AddValueUInt64(CFCString("virtual").get(), avg.GetVirtualSize(), true);
+ value.AddValueUInt64(CFCString("resident").get(), avg.GetResidentSize(), true);
+ value.AddValueUInt64(CFCString("max_resident").get(), avg.GetMaxResidentSize(), true);
+
+ dict.AddValue(CFCString("value").get(),value.get(), true);
+
parent.AppendValue(dict.get(), true);
}
template class lldb_perf::Metric<double>;
-template class lldb_perf::Metric<mach_vm_size_t>;
+template class lldb_perf::Metric<MemoryStats>;
Modified: lldb/trunk/tools/lldb-perf/lib/Metric.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Metric.h?rev=177580&r1=177579&r2=177580&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Metric.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/Metric.h Wed Mar 20 16:18:20 2013
@@ -17,6 +17,7 @@
namespace lldb_perf
{
+class MemoryStats;
class WriteToPList
{
public:
@@ -64,7 +65,7 @@ private:
void WriteImpl (CFCMutableArray& parent, identity<double>);
- void WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>);
+ void WriteImpl (CFCMutableArray& parent, identity<MemoryStats>);
std::string m_name;
std::string m_description;
Modified: lldb/trunk/tools/lldb-perf/lib/TestCase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/TestCase.h?rev=177580&r1=177579&r2=177580&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/TestCase.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/TestCase.h Wed Mar 20 16:18:20 2013
@@ -102,6 +102,12 @@ public:
return TimeMeasurement<A> (a,name, description);
}
+ template <typename A>
+ MemoryMeasurement<A> CreateMemoryMeasurement (A a, const char* name = NULL, const char* description = NULL)
+ {
+ return MemoryMeasurement<A> (a,name, description);
+ }
+
static void
Run (TestCase& test, int argc, const char** argv);
More information about the lldb-commits
mailing list