[Lldb-commits] [lldb] r177696 - Much more cleanup on the performance testing infrastructure:
Greg Clayton
gclayton at apple.com
Thu Mar 21 19:31:35 PDT 2013
Author: gclayton
Date: Thu Mar 21 21:31:35 2013
New Revision: 177696
URL: http://llvm.org/viewvc/llvm-project?rev=177696&view=rev
Log:
Much more cleanup on the performance testing infrastructure:
- Added new abtract Results class to keep CoreFoundation out of the tests. There are many subclasses for different settings:
Results::Result::Dictionary
Results::Result::Array
Results::Result::Unsigned
Results::Result::Double
Results::Result::String
- Gauge<T> can now write themselves out via a templatized write to results function:
template <class T>
Results::ResultSP GetResult (const char *description, T value);
- There are four specializations of this so far:
template <>
Results::ResultSP GetResult (const char *description, double value);
template <>
Results::ResultSP GetResult (const char *description, uint64_t value);
template <>
Results::ResultSP GetResult (const char *description, std::string value);
template <>
Results::ResultSP GetResult (const char *description, MemoryStats value);
- Don't emit the virtual memory reading from the task info call as it really doesn't mean much as it includes way too much (shared cache + other stuff we don't have control over)
- Fixed other test cases to build correctly and use the new classes
Added:
lldb/trunk/tools/lldb-perf/lib/Gauge.cpp
lldb/trunk/tools/lldb-perf/lib/Results.cpp
lldb/trunk/tools/lldb-perf/lib/Results.h
Modified:
lldb/trunk/tools/lldb-perf/common/clang/build-clang.sh
lldb/trunk/tools/lldb-perf/common/clang/lldb_perf_clang.cpp
lldb/trunk/tools/lldb-perf/common/stepping/lldb-perf-stepping.cpp
lldb/trunk/tools/lldb-perf/darwin/formatters/formatters.cpp
lldb/trunk/tools/lldb-perf/darwin/sketch/sketch.cpp
lldb/trunk/tools/lldb-perf/lib/Gauge.h
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.cpp
lldb/trunk/tools/lldb-perf/lib/TestCase.h
lldb/trunk/tools/lldb-perf/lib/Timer.cpp
lldb/trunk/tools/lldb-perf/lib/Timer.h
lldb/trunk/tools/lldb-perf/lldbperf.xcodeproj/project.pbxproj
Modified: lldb/trunk/tools/lldb-perf/common/clang/build-clang.sh
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/common/clang/build-clang.sh?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/common/clang/build-clang.sh (original)
+++ lldb/trunk/tools/lldb-perf/common/clang/build-clang.sh Thu Mar 21 21:31:35 2013
@@ -1,10 +1,26 @@
#!/bin/bash
-mkdir llvm-build
+if [ -d "llvm-build" ]; then
+ echo "Using existing 'llvm-build' directory..."
+else
+ mkdir llvm-build
+fi
+
cd llvm-build
-svn co --revision 176809 http://llvm.org/svn/llvm-project/llvm/trunk llvm
-( cd llvm/tools ; svn co --revision 176809 http://llvm.org/svn/llvm-project/cfe/trunk clang )
-mkdir build
-cd build
-../llvm/configure --enable-targets=x86_64,arm --build=x86_64-apple-darwin10 --enable-optimized --disable-assertions
-make -j8
+
+if [ -d "llvm" ]; then
+ echo "Using existing 'llvm' directory..."
+else
+ svn co --revision 176809 http://llvm.org/svn/llvm-project/llvm/trunk llvm
+ ( cd llvm/tools ; svn co --revision 176809 http://llvm.org/svn/llvm-project/cfe/trunk clang )
+fi
+
+if [ ! -d "build" ]; then
+ mkdir build
+ cd build
+ ../llvm/configure --enable-targets=x86_64,arm --build=x86_64-apple-darwin10 --disable-optimized --disable-assertions --enable-libcpp
+ make -j8 DEBUG_SYMBOLS=1
+fi
+
+
+
Modified: lldb/trunk/tools/lldb-perf/common/clang/lldb_perf_clang.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/common/clang/lldb_perf_clang.cpp?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/common/clang/lldb_perf_clang.cpp (original)
+++ lldb/trunk/tools/lldb-perf/common/clang/lldb_perf_clang.cpp Thu Mar 21 21:31:35 2013
@@ -7,14 +7,12 @@
//
//===----------------------------------------------------------------------===//
-#include <CoreFoundation/CoreFoundation.h>
-
#include "lldb-perf/lib/Timer.h"
#include "lldb-perf/lib/Metric.h"
#include "lldb-perf/lib/Measurement.h"
+#include "lldb-perf/lib/Results.h"
#include "lldb-perf/lib/TestCase.h"
#include "lldb-perf/lib/Xcode.h"
-
#include <iostream>
#include <unistd.h>
#include <fstream>
@@ -24,11 +22,15 @@ using namespace lldb_perf;
class ClangTest : public TestCase
{
public:
- ClangTest () : TestCase()
+ ClangTest () :
+ TestCase(),
+ m_set_bp_main_by_name(CreateTimeMeasurement([this] () -> void
+ {
+ m_target.BreakpointCreateByName("main");
+ m_target.BreakpointCreateByName("malloc");
+ }, "breakpoint1-relative-time", "Elapsed time to set a breakpoint at main by name, run and hit the breakpoint.")),
+ m_delta_memory("breakpoint1-memory-delta", "Memory increase that occurs due to setting a breakpoint at main by name.")
{
- m_set_bp_main_by_name = CreateTimeMeasurement([this] () -> void {
- m_target.BreakpointCreateByName("main");
- }, "break at \"main\"", "time set a breakpoint at main by name, run and hit the breakpoint");
}
virtual
@@ -39,13 +41,10 @@ public:
virtual bool
Setup (int argc, const char** argv)
{
+ SetVerbose(true);
m_app_path.assign(argv[1]);
m_out_path.assign(argv[2]);
- m_target = m_debugger.CreateTarget(m_app_path.c_str());
- m_set_bp_main_by_name();
- const char *clang_argv[] = { "clang --version", NULL };
- SBLaunchInfo launch_info(clang_argv);
- return Launch (launch_info);
+ return true;
}
void
@@ -59,71 +58,53 @@ public:
switch (counter)
{
case 0:
- m_target.BreakpointCreateByLocation("fmts_tester.mm", 68);
- next_action.Continue();
+ {
+ m_total_memory.Start();
+ m_target = m_debugger.CreateTarget(m_app_path.c_str());
+ const char *clang_argv[] = { "clang --version", NULL };
+ m_delta_memory.Start();
+ m_set_bp_main_by_name();
+ m_delta_memory.Stop();
+ SBLaunchInfo launch_info(clang_argv);
+ Launch (launch_info);
+ }
break;
case 1:
- DoTest ();
- next_action.Continue();
+ next_action.StepOver(m_thread);
break;
case 2:
- DoTest ();
- next_action.Continue();
+ next_action.StepOver(m_thread);
break;
case 3:
- DoTest ();
- next_action.Continue();
- break;
- case 4:
- DoTest ();
- next_action.Continue();
- break;
- case 5:
- DoTest ();
- next_action.Continue();
- break;
- case 6:
- DoTest ();
- next_action.Continue();
- break;
- case 7:
- DoTest ();
- next_action.Continue();
- break;
- case 8:
- DoTest ();
- next_action.Continue();
- break;
- case 9:
- DoTest ();
- next_action.Continue();
- break;
- case 10:
- DoTest ();
- next_action.Continue();
+ next_action.StepOver(m_thread);
break;
default:
+ m_total_memory.Stop();
next_action.Kill();
break;
}
}
void
- Results ()
+ WriteResults (Results &results)
{
- CFCMutableArray array;
- m_set_bp_main_by_name.Write(array);
-
- CFDataRef xmlData = CFPropertyListCreateData(kCFAllocatorDefault, array.get(), kCFPropertyListXMLFormat_v1_0, 0, NULL);
+ Results::Dictionary& results_dict = results.GetDictionary();
- CFURLRef file = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)m_out_path.c_str(), m_out_path.size(), FALSE);
+ m_set_bp_main_by_name.WriteAverageValue(results);
+ m_delta_memory.WriteAverageValue(results);
+
+ results_dict.Add ("breakpoint1-memory-total",
+ "The total memory that the current process is using after setting the first breakpoint.",
+ m_total_memory.GetStopValue().GetResult(NULL, NULL));
- CFURLWriteDataAndPropertiesToResource(file,xmlData,NULL,NULL);
+ results.Write(m_out_path.c_str());
}
private:
// C++ formatters
TimeMeasurement<std::function<void()>> m_set_bp_main_by_name;
+ MemoryMeasurement<std::function<void()>> m_delta_memory;
+ MemoryGauge m_total_memory;
std::string m_app_path;
std::string m_out_path;
Modified: lldb/trunk/tools/lldb-perf/common/stepping/lldb-perf-stepping.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/common/stepping/lldb-perf-stepping.cpp?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/common/stepping/lldb-perf-stepping.cpp (original)
+++ lldb/trunk/tools/lldb-perf/common/stepping/lldb-perf-stepping.cpp Thu Mar 21 21:31:35 2013
@@ -22,7 +22,7 @@ public:
virtual
~StepTest() {}
- virtual void
+ virtual bool
Setup (int argc, const char **argv)
{
m_app_path.assign(argv[1]);
@@ -33,14 +33,29 @@ public:
const char* file_arg = m_app_path.c_str();
const char* empty = nullptr;
const char* args[] = {file_arg, empty};
+ SBLaunchInfo launch_info (args);
- Launch (args,".");
+ return Launch (launch_info);
}
-private:
void
DoOneStep (int sequence)
{
+
+ }
+
+
+ void
+ WriteResults (Results &results)
+ {
+// results.Write(m_out_path.c_str());
+ }
+
+
+private:
+ virtual void
+ TestStep (int counter, ActionWanted &next_action)
+ {
}
@@ -61,7 +76,7 @@ int main(int argc, const char * argv[])
return -1;
}
- StepTest skt;
- TestCase::Run(skt,argc,argv);
+ StepTest test;
+ TestCase::Run(test,argc,argv);
return 0;
}
Modified: lldb/trunk/tools/lldb-perf/darwin/formatters/formatters.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/darwin/formatters/formatters.cpp?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/darwin/formatters/formatters.cpp (original)
+++ lldb/trunk/tools/lldb-perf/darwin/formatters/formatters.cpp Thu Mar 21 21:31:35 2013
@@ -197,27 +197,21 @@ public:
}
}
- void
- Results ()
+ virtual void
+ WriteResults (Results &results)
{
- CFCMutableArray array;
- m_dump_std_vector_measurement.Write(array);
- m_dump_std_list_measurement.Write(array);
- m_dump_std_map_measurement.Write(array);
- m_dump_std_string_measurement.Write(array);
-
- m_dump_nsstring_measurement.Write(array);
- m_dump_nsarray_measurement.Write(array);
- m_dump_nsdictionary_measurement.Write(array);
- m_dump_nsset_measurement.Write(array);
- m_dump_nsbundle_measurement.Write(array);
- m_dump_nsdate_measurement.Write(array);
-
- CFDataRef xmlData = CFPropertyListCreateData(kCFAllocatorDefault, array.get(), kCFPropertyListXMLFormat_v1_0, 0, NULL);
+ m_dump_std_vector_measurement.WriteAverageValue(results);
+ m_dump_std_list_measurement.WriteAverageValue(results);
+ m_dump_std_map_measurement.WriteAverageValue(results);
+ m_dump_std_string_measurement.WriteAverageValue(results);
- CFURLRef file = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)m_out_path.c_str(), m_out_path.size(), FALSE);
-
- CFURLWriteDataAndPropertiesToResource(file,xmlData,NULL,NULL);
+ m_dump_nsstring_measurement.WriteAverageValue(results);
+ m_dump_nsarray_measurement.WriteAverageValue(results);
+ m_dump_nsdictionary_measurement.WriteAverageValue(results);
+ m_dump_nsset_measurement.WriteAverageValue(results);
+ m_dump_nsbundle_measurement.WriteAverageValue(results);
+ m_dump_nsdate_measurement.WriteAverageValue(results);
+ results.Write(m_out_path.c_str());
}
private:
Modified: lldb/trunk/tools/lldb-perf/darwin/sketch/sketch.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/darwin/sketch/sketch.cpp?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/darwin/sketch/sketch.cpp (original)
+++ lldb/trunk/tools/lldb-perf/darwin/sketch/sketch.cpp Thu Mar 21 21:31:35 2013
@@ -179,21 +179,15 @@ public:
}
}
- void
- Results ()
+ virtual void
+ WriteResults (Results &results)
{
- CFCMutableArray array;
- m_fetch_frames_measurement.Write(array);
- m_file_line_bp_measurement.Write(array);
- m_fetch_modules_measurement.Write(array);
- m_fetch_vars_measurement.Write(array);
- m_run_expr_measurement.Write(array);
-
- CFDataRef xmlData = CFPropertyListCreateData(kCFAllocatorDefault, array.get(), kCFPropertyListXMLFormat_v1_0, 0, NULL);
-
- CFURLRef file = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)m_out_path.c_str(), m_out_path.size(), FALSE);
-
- CFURLWriteDataAndPropertiesToResource(file,xmlData,NULL,NULL);
+ m_fetch_frames_measurement.WriteAverageValue(results);
+ m_file_line_bp_measurement.WriteAverageValue(results);
+ m_fetch_modules_measurement.WriteAverageValue(results);
+ m_fetch_vars_measurement.WriteAverageValue(results);
+ m_run_expr_measurement.WriteAverageValue(results);
+ results.Write(m_out_path.c_str());
}
private:
Added: lldb/trunk/tools/lldb-perf/lib/Gauge.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Gauge.cpp?rev=177696&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Gauge.cpp (added)
+++ lldb/trunk/tools/lldb-perf/lib/Gauge.cpp Thu Mar 21 21:31:35 2013
@@ -0,0 +1,52 @@
+//===-- Gauge.cpp -----------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Gauge.h"
+
+template <>
+lldb_perf::Results::ResultSP
+lldb_perf::GetResult (const char *description, double value)
+{
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->AddDouble("value", NULL, value);
+ return Results::ResultSP (value_dict_ap.release());
+ }
+ return Results::ResultSP (new Results::Double (NULL, NULL, value));
+}
+
+template <>
+lldb_perf::Results::ResultSP
+lldb_perf::GetResult (const char *description, uint64_t value)
+{
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->AddUnsigned("value", NULL, value);
+ return Results::ResultSP (value_dict_ap.release());
+ }
+ return Results::ResultSP (new Results::Unsigned (NULL, NULL, value));
+}
+
+template <>
+lldb_perf::Results::ResultSP
+lldb_perf::GetResult (const char *description, std::string value)
+{
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->AddString("value", NULL, value.c_str());
+ return Results::ResultSP (value_dict_ap.release());
+ }
+ return Results::ResultSP (new Results::String (NULL, NULL, value.c_str()));
+}
Modified: lldb/trunk/tools/lldb-perf/lib/Gauge.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Gauge.h?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Gauge.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/Gauge.h Thu Mar 21 21:31:35 2013
@@ -11,15 +11,20 @@
#define PerfTestDriver_Gauge_h
#include <functional>
+#include <string>
+
+#include "Results.h"
+
+class CFCMutableDictionary;
namespace lldb_perf {
-template <class TASizeType>
+template <class T>
class Gauge
{
public:
- typedef TASizeType SizeType;
-public:
+ typedef T ValueType;
+
Gauge ()
{}
@@ -30,22 +35,32 @@ public:
virtual void
Start () = 0;
- virtual SizeType
+ virtual ValueType
Stop () = 0;
-
- virtual SizeType
- GetValue () = 0;
-
- template <typename F, typename... Args>
- SizeType
- Measure (F f,Args... args)
- {
- Start();
- f(args...);
- return Stop();
- }
+
+ virtual ValueType
+ GetStartValue () const = 0;
+
+ virtual ValueType
+ GetStopValue () const = 0;
+
+ virtual ValueType
+ GetDeltaValue () const = 0;
};
+
+template <class T>
+Results::ResultSP GetResult (const char *description, T value);
+
+template <>
+Results::ResultSP GetResult (const char *description, double value);
+
+template <>
+Results::ResultSP GetResult (const char *description, uint64_t value);
+
+template <>
+Results::ResultSP GetResult (const char *description, std::string value);
+
}
#endif
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=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Measurement.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/Measurement.h Thu Mar 21 21:31:35 2013
@@ -17,28 +17,35 @@
namespace lldb_perf
{
-template <typename GaugeType, typename Action>
-class Measurement : public WriteToPList
+template <typename GaugeType, typename Callable>
+class Measurement : public WriteResults
{
public:
Measurement () :
m_gauge (),
- m_action (),
+ m_callable (),
m_metric ()
{
}
- Measurement (Action act, const char* name = NULL, const char* desc = NULL) :
+ Measurement (Callable callable, const char* name, const char* desc) :
m_gauge (),
- m_action (act),
- m_metric (Metric<typename GaugeType::SizeType>(name, desc))
+ m_callable (callable),
+ m_metric (Metric<typename GaugeType::ValueType>(name, desc))
{
}
-
- template <typename GaugeType_Rhs, typename Action_Rhs>
- Measurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) :
+
+ Measurement (const char* name, const char* desc) :
+ m_gauge (),
+ m_callable (),
+ m_metric (Metric<typename GaugeType::ValueType>(name, desc))
+ {
+ }
+
+ template <typename GaugeType_Rhs, typename Callable_Rhs>
+ Measurement (const Measurement<GaugeType_Rhs, Callable_Rhs>& rhs) :
m_gauge(rhs.GetGauge()),
- m_action(rhs.GetAction()),
+ m_callable(rhs.GetCallable()),
m_metric(rhs.GetMetric())
{
}
@@ -47,13 +54,15 @@ public:
void
operator () (Args... args)
{
- m_metric.Append (m_gauge.Measure(m_action, args...));
+ m_gauge.Start();
+ m_callable(args...);
+ m_metric.Append (m_gauge.Stop());
}
- virtual const Action&
- GetAction () const
+ virtual const Callable&
+ GetCallable () const
{
- return m_action;
+ return m_callable;
}
virtual const GaugeType&
@@ -62,7 +71,7 @@ public:
return m_gauge;
}
- virtual const Metric<typename GaugeType::SizeType>&
+ virtual const Metric<typename GaugeType::ValueType>&
GetMetric () const
{
return m_metric;
@@ -74,7 +83,7 @@ public:
m_gauge.Start();
}
- typename GaugeType::SizeType
+ typename GaugeType::ValueType
Stop ()
{
auto value = m_gauge.Stop();
@@ -83,42 +92,63 @@ public:
}
virtual void
- Write (CFCMutableArray& parent)
+ Write (CFCMutableDictionary& parent)
{
m_metric.Write(parent);
}
+ void
+ WriteStartValue (Results &results)
+ {
+ auto metric = GetMetric ();
+ results.GetDictionary().Add(metric.GetName(), metric.GetDescription(), lldb_perf::GetResult<typename GaugeType::ValueType> (NULL, metric.GetStartValue()));
+ }
+
+ void
+ WriteStopValue (Results &results)
+ {
+ auto metric = GetMetric ();
+ results.GetDictionary().Add(metric.GetName(), metric.GetDescription(), lldb_perf::GetResult<typename GaugeType::ValueType> (NULL, metric.GetStopValue()));
+ }
+
+ void
+ WriteAverageValue (Results &results)
+ {
+ auto metric = GetMetric ();
+ results.GetDictionary().Add(metric.GetName(), metric.GetDescription(), lldb_perf::GetResult<typename GaugeType::ValueType> (NULL, metric.GetAverage()));
+ }
+
protected:
GaugeType m_gauge;
- Action m_action;
- Metric<typename GaugeType::SizeType> m_metric;
+ Callable m_callable;
+ Metric<typename GaugeType::ValueType> m_metric;
};
-template <typename Action>
-class TimeMeasurement : public Measurement<TimeGauge,Action>
+template <typename Callable>
+class TimeMeasurement : public Measurement<TimeGauge,Callable>
{
public:
TimeMeasurement () :
- Measurement<TimeGauge,Action> ()
+ Measurement<TimeGauge,Callable> ()
{
}
- TimeMeasurement (Action act,
+ TimeMeasurement (Callable callable,
const char* name = NULL,
const char* descr = NULL) :
- Measurement<TimeGauge,Action> (act, name, descr)
+ Measurement<TimeGauge,Callable> (callable, name, descr)
{
}
- template <typename Action_Rhs>
- TimeMeasurement (const TimeMeasurement<Action_Rhs>& rhs) :
- Measurement<TimeGauge,Action>(rhs)
+ template <typename Callable_Rhs>
+ TimeMeasurement (const TimeMeasurement<Callable_Rhs>& rhs) :
+ Measurement<TimeGauge,Callable>(rhs)
{
}
- template <typename GaugeType_Rhs, typename Action_Rhs>
- TimeMeasurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) :
- Measurement<GaugeType_Rhs,Action_Rhs>(rhs)
+ template <typename GaugeType_Rhs, typename Callable_Rhs>
+ TimeMeasurement (const Measurement<GaugeType_Rhs, Callable_Rhs>& rhs) :
+ Measurement<GaugeType_Rhs,Callable_Rhs>(rhs)
{
}
@@ -126,29 +156,39 @@ public:
void
operator () (Args... args)
{
- Measurement<TimeGauge,Action>::operator()(args...);
+ Measurement<TimeGauge,Callable>::operator()(args...);
}
};
-template <typename Action>
-class MemoryMeasurement : public Measurement<MemoryGauge,Action>
+template <typename Callable>
+class MemoryMeasurement : public Measurement<MemoryGauge,Callable>
{
public:
- MemoryMeasurement () : Measurement<MemoryGauge,Action> ()
+ MemoryMeasurement () : Measurement<MemoryGauge,Callable> ()
{
}
- MemoryMeasurement (Action act, const char* name = NULL, const char* descr = NULL) : Measurement<MemoryGauge,Action> (act, name, descr)
+ MemoryMeasurement (Callable callable,
+ const char* name,
+ const char* descr) :
+ Measurement<MemoryGauge,Callable> (callable, name, descr)
{
}
-
- template <typename Action_Rhs>
- MemoryMeasurement (const MemoryMeasurement<Action_Rhs>& rhs) : Measurement<MemoryGauge,Action>(rhs)
+
+ MemoryMeasurement (const char* name, const char* descr) :
+ Measurement<MemoryGauge,Callable> (name, descr)
+ {
+ }
+
+ template <typename Callable_Rhs>
+ MemoryMeasurement (const MemoryMeasurement<Callable_Rhs>& rhs) :
+ Measurement<MemoryGauge,Callable>(rhs)
{
}
- template <typename GaugeType_Rhs, typename Action_Rhs>
- MemoryMeasurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) : Measurement<GaugeType_Rhs,Action_Rhs>(rhs)
+ template <typename GaugeType_Rhs, typename Callable_Rhs>
+ MemoryMeasurement (const Measurement<GaugeType_Rhs, Callable_Rhs>& rhs) :
+ Measurement<GaugeType_Rhs,Callable_Rhs>(rhs)
{
}
@@ -156,7 +196,7 @@ public:
void
operator () (Args... args)
{
- Measurement<MemoryGauge,Action>::operator()(args...);
+ Measurement<MemoryGauge,Callable>::operator()(args...);
}
};
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=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp (original)
+++ lldb/trunk/tools/lldb-perf/lib/MemoryGauge.cpp Thu Mar 21 21:31:35 2013
@@ -70,7 +70,16 @@ MemoryStats::operator / (size_t n)
return *this;
}
-MemoryGauge::SizeType
+Results::ResultSP
+MemoryStats::GetResult (const char *name, const char *description) const
+{
+ std::unique_ptr<Results::Dictionary> dict_ap (new Results::Dictionary (name, NULL));
+ dict_ap->AddUnsigned("resident", NULL, GetResidentSize());
+ dict_ap->AddUnsigned("max_resident", NULL, GetMaxResidentSize());
+ return Results::ResultSP(dict_ap.release());
+}
+
+MemoryGauge::ValueType
MemoryGauge::Now ()
{
task_t task = mach_task_self();
@@ -84,8 +93,9 @@ MemoryGauge::Now ()
}
MemoryGauge::MemoryGauge () :
+ m_state(MemoryGauge::State::eNeverUsed),
m_start(),
- m_state(MemoryGauge::State::eNeverUsed)
+ m_delta()
{
}
@@ -96,18 +106,27 @@ MemoryGauge::Start ()
m_start = Now();
}
-MemoryGauge::SizeType
+MemoryGauge::ValueType
MemoryGauge::Stop ()
{
- auto stop = Now();
+ m_stop = Now();
assert(m_state == MemoryGauge::State::eCounting && "cannot stop a non-started gauge");
m_state = MemoryGauge::State::eStopped;
- return (m_value = stop-m_start);
+ m_delta = m_stop - m_start;
+ return m_delta;
}
-MemoryGauge::SizeType
-MemoryGauge::GetValue ()
+
+MemoryGauge::ValueType
+MemoryGauge::GetDeltaValue () const
{
assert(m_state == MemoryGauge::State::eStopped && "gauge must be used before you can evaluate it");
- return m_value;
+ return m_delta;
+}
+
+template <>
+Results::ResultSP
+lldb_perf::GetResult (const char *description, MemoryStats value)
+{
+ return value.GetResult (NULL, description);
}
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=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/MemoryGauge.h Thu Mar 21 21:31:35 2013
@@ -11,11 +11,12 @@
#define __PerfTestDriver__MemoryGauge__
#include "Gauge.h"
+#include "Results.h"
#include <mach/task_info.h>
-namespace lldb_perf
-{
+namespace lldb_perf {
+
class MemoryStats
{
public:
@@ -37,19 +38,19 @@ public:
operator / (size_t rhs);
mach_vm_size_t
- GetVirtualSize ()
+ GetVirtualSize () const
{
return m_virtual_size;
}
mach_vm_size_t
- GetResidentSize ()
+ GetResidentSize () const
{
return m_resident_size;
}
mach_vm_size_t
- GetMaxResidentSize ()
+ GetMaxResidentSize () const
{
return m_max_resident_size;
}
@@ -72,6 +73,8 @@ public:
m_max_resident_size = mrs;
}
+ Results::ResultSP
+ GetResult (const char *name, const char *description) const;
private:
mach_vm_size_t m_virtual_size;
mach_vm_size_t m_resident_size;
@@ -91,11 +94,23 @@ public:
void
Start ();
- SizeType
+ ValueType
Stop ();
- SizeType
- GetValue ();
+ virtual ValueType
+ GetStartValue() const
+ {
+ return m_start;
+ }
+
+ virtual ValueType
+ GetStopValue() const
+ {
+ return m_stop;
+ }
+
+ virtual ValueType
+ GetDeltaValue() const;
private:
enum class State
@@ -105,14 +120,19 @@ private:
eStopped
};
- SizeType
+ ValueType
Now ();
- SizeType m_start;
State m_state;
- SizeType m_value;
-
+ ValueType m_start;
+ ValueType m_stop;
+ ValueType m_delta;
};
-}
-#endif /* defined(__PerfTestDriver__MemoryGauge__) */
+template <>
+Results::ResultSP
+GetResult (const char *description, MemoryStats value);
+
+} // namespace lldb_perf
+
+#endif // #ifndef __PerfTestDriver__MemoryGauge__
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=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Metric.cpp (original)
+++ lldb/trunk/tools/lldb-perf/lib/Metric.cpp Thu Mar 21 21:31:35 2013
@@ -18,14 +18,16 @@ using namespace lldb_perf;
template <class T>
Metric<T>::Metric () : Metric ("")
-{}
+{
+}
template <class T>
Metric<T>::Metric (const char* n, const char* d) :
-m_name(n ? n : ""),
-m_description(d ? d : ""),
-m_dataset ()
-{}
+ m_name(n ? n : ""),
+ m_description(d ? d : ""),
+ m_dataset ()
+{
+}
template <class T>
void
@@ -59,32 +61,32 @@ Metric<T>::GetAverage () const
}
template <>
-void Metric<double>::WriteImpl (CFCMutableArray& parent, identity<double>)
+void Metric<double>::WriteImpl (CFCMutableDictionary& parent_dict, const char *name, const char *description, double value)
{
+ assert(name && name[0]);
CFCMutableDictionary dict;
- dict.AddValueCString(CFCString("name").get(), GetName(), true);
- dict.AddValueCString(CFCString("description").get(),GetDescription(), true);
- dict.AddValueDouble(CFCString("value").get(),this->GetAverage(), true);
- parent.AppendValue(dict.get(), true);
+ if (description && description[0])
+ dict.AddValueCString(CFCString("description").get(),description, true);
+ dict.AddValueDouble(CFCString("value").get(),value, true);
+ parent_dict.AddValue(CFCString(name).get(), dict.get(), true);
}
template <>
-void Metric<MemoryStats>::WriteImpl (CFCMutableArray& parent, identity<MemoryStats>)
+void Metric<MemoryStats>::WriteImpl (CFCMutableDictionary& parent_dict, const char *name, const char *description, MemoryStats value)
{
CFCMutableDictionary dict;
- dict.AddValueCString(CFCString("name").get(), GetName(), true);
- dict.AddValueCString(CFCString("description").get(), GetDescription(), true);
- CFCMutableDictionary value;
-
- auto avg = this->GetAverage();
-
- 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);
+ if (description && description[0])
+ dict.AddValueCString(CFCString("description").get(),description, true);
+ CFCMutableDictionary value_dict;
+ // don't write out the "virtual size", it doesn't mean anything useful as it includes
+ // all of the shared cache and many other things that make it way too big to be useful
+ //value_dict.AddValueUInt64(CFCString("virtual").get(), value.GetVirtualSize(), true);
+ value_dict.AddValueUInt64(CFCString("resident").get(), value.GetResidentSize(), true);
+ value_dict.AddValueUInt64(CFCString("max_resident").get(), value.GetMaxResidentSize(), true);
- dict.AddValue(CFCString("value").get(), value.get(), true);
-
- parent.AppendValue(dict.get(), true);
+ dict.AddValue(CFCString("value").get(),value_dict.get(), true);
+
+ parent_dict.AddValue(CFCString(name).get(), dict.get(), true);
}
template class lldb_perf::Metric<double>;
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=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Metric.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/Metric.h Thu Mar 21 21:31:35 2013
@@ -14,24 +14,24 @@
#include <string>
#include <mach/task_info.h>
-#include "CFCMutableArray.h"
+#include "CFCMutableDictionary.h"
namespace lldb_perf {
class MemoryStats;
-class WriteToPList
+class WriteResults
{
public:
virtual void
- Write (CFCMutableArray& parent) = 0;
+ Write (CFCMutableDictionary& parent) = 0;
virtual
- ~WriteToPList () {}
+ ~WriteResults () {}
};
template <class ValueType>
-class Metric : public WriteToPList
+class Metric : public WriteResults
{
public:
Metric ();
@@ -50,32 +50,31 @@ public:
GetSum () const;
const char*
- GetName ()
+ GetName () const
{
+ if (m_name.empty())
+ return NULL;
return m_name.c_str();
}
const char*
- GetDescription ()
+ GetDescription () const
{
+ if (m_description.empty())
+ return NULL;
return m_description.c_str();
}
virtual void
- Write (CFCMutableArray& parent)
+ Write (CFCMutableDictionary& parent)
{
- WriteImpl(parent, identity<ValueType>());
+ WriteImpl(parent, GetName(), GetDescription(), GetAverage());
}
-
-private:
- template<typename T>
- struct identity { typedef T type; };
-
- void WriteImpl (CFCMutableArray& parent, identity<double>);
+ static void WriteImpl (CFCMutableDictionary& parent, const char *name, const char *description, double);
+ static void WriteImpl (CFCMutableDictionary& parent, const char *name, const char *description, MemoryStats);
- void WriteImpl (CFCMutableArray& parent, identity<MemoryStats>);
-
+private:
std::string m_name;
std::string m_description;
std::vector<ValueType> m_dataset;
Added: lldb/trunk/tools/lldb-perf/lib/Results.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Results.cpp?rev=177696&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Results.cpp (added)
+++ lldb/trunk/tools/lldb-perf/lib/Results.cpp Thu Mar 21 21:31:35 2013
@@ -0,0 +1,267 @@
+//===-- Results.cpp ---------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Results.h"
+#include <assert.h>
+
+#ifdef __APPLE__
+#include "CFCMutableArray.h"
+#include "CFCMutableDictionary.h"
+#include "CFCReleaser.h"
+#include "CFCString.h"
+#endif
+
+using namespace lldb_perf;
+
+static void
+AddResultToArray (CFCMutableArray &array, Results::Result *result);
+
+static void
+AddResultToDictionary (CFCMutableDictionary &parent_dict, const char *key, Results::Result *result);
+
+static void
+AddResultToArray (CFCMutableArray &parent_array, Results::Result *result)
+{
+ switch (result->GetType())
+ {
+ case Results::Result::Type::Invalid:
+ break;
+
+ case Results::Result::Type::Array:
+ {
+ Results::Array *value = result->GetAsArray();
+ CFCMutableArray array;
+ value->ForEach([&array](const Results::ResultSP &value_sp) -> bool
+ {
+ AddResultToArray (array, value_sp.get());
+ return true;
+ });
+ parent_array.AppendValue(array.get(), true);
+ }
+ break;
+
+ case Results::Result::Type::Dictionary:
+ {
+ Results::Dictionary *value = result->GetAsDictionary();
+ CFCMutableDictionary dict;
+ value->ForEach([&dict](const std::string &key, const Results::ResultSP &value_sp) -> bool
+ {
+ AddResultToDictionary (dict, key.c_str(), value_sp.get());
+ return true;
+ });
+ if (result->GetDescription())
+ {
+ dict.AddValueCString(CFSTR("description"), result->GetDescription());
+ }
+ parent_array.AppendValue(dict.get(), true);
+ }
+ break;
+
+ case Results::Result::Type::Double:
+ {
+ double d = result->GetAsDouble()->GetValue();
+ CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberDoubleType, &d));
+ if (cf_number.get())
+ parent_array.AppendValue(cf_number.get(), true);
+ }
+ break;
+ case Results::Result::Type::String:
+ {
+ CFCString cfstr (result->GetAsString()->GetValue());
+ if (cfstr.get())
+ parent_array.AppendValue(cfstr.get(), true);
+ }
+ break;
+
+ case Results::Result::Type::Unsigned:
+ {
+ uint64_t uval64 = result->GetAsUnsigned()->GetValue();
+ CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &uval64));
+ if (cf_number.get())
+ parent_array.AppendValue(cf_number.get(), true);
+ }
+ break;
+
+ default:
+ assert (!"unhandled result");
+ break;
+ }
+}
+
+
+static void
+AddResultToDictionary (CFCMutableDictionary &parent_dict, const char *key, Results::Result *result)
+{
+ assert (key && key[0]);
+ CFCString cf_key(key);
+ switch (result->GetType())
+ {
+ case Results::Result::Type::Invalid:
+ break;
+
+ case Results::Result::Type::Array:
+ {
+ Results::Array *value = result->GetAsArray();
+ CFCMutableArray array;
+ value->ForEach([&array](const Results::ResultSP &value_sp) -> bool
+ {
+ AddResultToArray (array, value_sp.get());
+ return true;
+ });
+ parent_dict.AddValue(cf_key.get(), array.get(), true);
+ }
+ break;
+ case Results::Result::Type::Dictionary:
+ {
+ Results::Dictionary *value = result->GetAsDictionary();
+ CFCMutableDictionary dict;
+ value->ForEach([&dict](const std::string &key, const Results::ResultSP &value_sp) -> bool
+ {
+ AddResultToDictionary (dict, key.c_str(), value_sp.get());
+ return true;
+ });
+ if (result->GetDescription())
+ {
+ dict.AddValueCString(CFSTR("description"), result->GetDescription());
+ }
+ parent_dict.AddValue(cf_key.get(), dict.get(), true);
+ }
+ break;
+ case Results::Result::Type::Double:
+ {
+ parent_dict.SetValueDouble(cf_key.get(), result->GetAsDouble()->GetValue(), true);
+ }
+ break;
+ case Results::Result::Type::String:
+ {
+ parent_dict.SetValueCString(cf_key.get(), result->GetAsString()->GetValue(), true);
+ }
+ break;
+
+ case Results::Result::Type::Unsigned:
+ {
+ parent_dict.SetValueUInt64 (cf_key.get(), result->GetAsUnsigned()->GetValue(), true);
+ }
+ break;
+ default:
+ assert (!"unhandled result");
+ break;
+ }
+}
+void
+Results::Write (const char *out_path)
+{
+#ifdef __APPLE__
+ CFCMutableDictionary dict;
+
+ m_results.ForEach([&dict](const std::string &key, const ResultSP &value_sp) -> bool
+ {
+ AddResultToDictionary (dict, key.c_str(), value_sp.get());
+ return true;
+ });
+ CFDataRef xmlData = CFPropertyListCreateData(kCFAllocatorDefault, dict.get(), kCFPropertyListXMLFormat_v1_0, 0, NULL);
+
+ CFURLRef file = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)out_path, strlen(out_path), FALSE);
+
+ CFURLWriteDataAndPropertiesToResource(file, xmlData, NULL, NULL);
+#endif
+}
+
+void
+Results::Dictionary::AddUnsigned (const char *name, const char *description, uint64_t value)
+{
+ assert (name && name[0]);
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->AddUnsigned("value", NULL, value);
+ m_dictionary[std::string(name)] = ResultSP (value_dict_ap.release());
+ }
+ else
+ m_dictionary[std::string(name)] = ResultSP (new Unsigned (name, description, value));
+}
+
+void
+Results::Dictionary::AddDouble (const char *name, const char *description, double value)
+{
+ assert (name && name[0]);
+
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->AddDouble("value", NULL, value);
+ m_dictionary[std::string(name)] = ResultSP (value_dict_ap.release());
+ }
+ else
+ m_dictionary[std::string(name)] = ResultSP (new Double (name, description, value));
+}
+void
+Results::Dictionary::AddString (const char *name, const char *description, const char *value)
+{
+ assert (name && name[0]);
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->AddString("value", NULL, value);
+ m_dictionary[std::string(name)] = ResultSP (value_dict_ap.release());
+ }
+ else
+ m_dictionary[std::string(name)] = ResultSP (new String (name, description, value));
+}
+
+void
+Results::Dictionary::Add (const char *name, const char *description, const ResultSP &result_sp)
+{
+ assert (name && name[0]);
+ if (description && description[0])
+ {
+ std::unique_ptr<Results::Dictionary> value_dict_ap (new Results::Dictionary ());
+ value_dict_ap->AddString("description", NULL, description);
+ value_dict_ap->Add("value", NULL, result_sp);
+ m_dictionary[std::string(name)] = ResultSP (value_dict_ap.release());
+ }
+ else
+ m_dictionary[std::string(name)] = result_sp;
+}
+
+void
+Results::Dictionary::ForEach (const std::function <bool (const std::string &, const ResultSP &)> &callback)
+{
+ collection::const_iterator pos, end = m_dictionary.end();
+ for (pos = m_dictionary.begin(); pos != end; ++pos)
+ {
+ if (callback (pos->first.c_str(), pos->second) == false)
+ return;
+ }
+}
+
+
+
+void
+Results::Array::Append (const ResultSP &result_sp)
+{
+ m_array.push_back (result_sp);
+}
+
+void
+Results::Array::ForEach (const std::function <bool (const ResultSP &)> &callback)
+{
+ collection::const_iterator pos, end = m_array.end();
+ for (pos = m_array.begin(); pos != end; ++pos)
+ {
+ if (callback (*pos) == false)
+ return;
+ }
+}
+
+
+
Added: lldb/trunk/tools/lldb-perf/lib/Results.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Results.h?rev=177696&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Results.h (added)
+++ lldb/trunk/tools/lldb-perf/lib/Results.h Thu Mar 21 21:31:35 2013
@@ -0,0 +1,312 @@
+//===-- Results.h -----------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __PerfTestDriver_Results_h__
+#define __PerfTestDriver_Results_h__
+
+#include <memory>
+#include <map>
+#include <string>
+#include <vector>
+
+namespace lldb_perf {
+
+class Results
+{
+public:
+ class Array;
+ class Dictionary;
+ class Double;
+ class String;
+ class Unsigned;
+
+ class Result
+ {
+ public:
+ enum class Type
+ {
+ Invalid,
+ Array,
+ Dictionary,
+ Double,
+ String,
+ Unsigned
+ };
+
+ Result (Type type, const char *name, const char *description) :
+ m_name (),
+ m_description(),
+ m_type (type)
+ {
+ if (name && name[0])
+ m_name = name;
+ if (description && description[0])
+ m_description = description;
+ }
+
+ virtual
+ ~Result()
+ {
+ }
+
+ virtual void
+ Write (Results &results) = 0;
+
+ Array *
+ GetAsArray ()
+ {
+ if (m_type == Type::Array)
+ return (Array *)this;
+ return NULL;
+ }
+ Dictionary *
+ GetAsDictionary ()
+ {
+ if (m_type == Type::Dictionary)
+ return (Dictionary *)this;
+ return NULL;
+ }
+ Double *
+ GetAsDouble ()
+ {
+ if (m_type == Type::Double)
+ return (Double *)this;
+ return NULL;
+ }
+
+ String *
+ GetAsString ()
+ {
+ if (m_type == Type::String)
+ return (String *)this;
+ return NULL;
+ }
+ Unsigned *
+ GetAsUnsigned ()
+ {
+ if (m_type == Type::Unsigned)
+ return (Unsigned *)this;
+ return NULL;
+ }
+
+ const char *
+ GetName() const
+ {
+ if (m_name.empty())
+ return NULL;
+ return m_name.c_str();
+ }
+
+ const char *
+ GetDescription() const
+ {
+ if (m_description.empty())
+ return NULL;
+ return m_description.c_str();
+ }
+
+ Type
+ GetType() const
+ {
+ return m_type;
+ }
+
+ protected:
+ std::string m_name;
+ std::string m_description;
+ Type m_type;
+ };
+
+ typedef std::shared_ptr<Result> ResultSP;
+
+ class Array : public Result
+ {
+ public:
+ Array (const char *name, const char *description) :
+ Result (Type::Array, name, description)
+ {
+ }
+
+ virtual
+ ~Array()
+ {
+ }
+
+ void
+ Append (const ResultSP &result_sp);
+
+ void
+ ForEach (const std::function <bool (const ResultSP &)> &callback);
+
+ virtual void
+ Write (Results &results)
+ {
+ }
+ protected:
+ typedef std::vector<ResultSP> collection;
+ collection m_array;
+ };
+
+ class Dictionary : public Result
+ {
+ public:
+ Dictionary () :
+ Result (Type::Dictionary, NULL, NULL)
+ {
+ }
+
+ Dictionary (const char *name, const char *description) :
+ Result (Type::Dictionary, name, description)
+ {
+ }
+
+ virtual
+ ~Dictionary()
+ {
+ }
+
+ virtual void
+ Write (Results &results)
+ {
+ }
+
+ void
+ ForEach (const std::function <bool (const std::string &, const ResultSP &)> &callback);
+
+ void
+ Add (const char *name, const char *description, const ResultSP &result_sp);
+
+ void
+ AddDouble (const char *name, const char *descriptiorn, double value);
+
+ void
+ AddUnsigned (const char *name, const char *description, uint64_t value);
+
+ void
+ AddString (const char *name, const char *description, const char *value);
+
+ protected:
+
+ typedef std::map<std::string, ResultSP> collection;
+ collection m_dictionary;
+ };
+
+ class String : public Result
+ {
+ public:
+ String (const char *name, const char *description, const char *value) :
+ Result (Type::String, name, description),
+ m_string ()
+ {
+ if (value && value[0])
+ m_string = value;
+ }
+
+ virtual
+ ~String()
+ {
+ }
+
+ virtual void
+ Write (Results &results)
+ {
+ }
+
+ const char *
+ GetValue () const
+ {
+ return m_string.empty() ? NULL : m_string.c_str();
+ }
+
+ protected:
+ std::string m_string;
+ };
+
+ class Double : public Result
+ {
+ public:
+ Double (const char *name, const char *description, double value) :
+ Result (Type::Double, name, description),
+ m_double (value)
+ {
+ }
+
+ virtual
+ ~Double()
+ {
+ }
+
+ virtual void
+ Write (Results &results)
+ {
+ }
+
+ double
+ GetValue () const
+ {
+ return m_double;
+ }
+
+ protected:
+ double m_double;
+ };
+
+ class Unsigned : public Result
+ {
+ public:
+ Unsigned (const char *name, const char *description, uint64_t value) :
+ Result (Type::Unsigned, name, description),
+ m_unsigned (value)
+ {
+ }
+
+ virtual
+ ~Unsigned()
+ {
+ }
+
+ virtual void
+ Write (Results &results)
+ {
+ }
+
+ uint64_t
+ GetValue () const
+ {
+ return m_unsigned;
+ }
+
+ protected:
+ uint64_t m_unsigned;
+ };
+
+ Results () :
+ m_results ()
+ {
+ }
+
+ ~Results()
+ {
+ }
+
+ Dictionary &
+ GetDictionary ()
+ {
+ return m_results;
+ }
+
+ void
+ Write (const char *path);
+
+protected:
+ Dictionary m_results;
+};
+
+} // namespace lldb_perf
+#endif // #ifndef __PerfTestDriver_Results_h__
Modified: lldb/trunk/tools/lldb-perf/lib/TestCase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/TestCase.cpp?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/TestCase.cpp (original)
+++ lldb/trunk/tools/lldb-perf/lib/TestCase.cpp Thu Mar 21 21:31:35 2013
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "TestCase.h"
+#include "Results.h"
#include "Xcode.h"
using namespace lldb_perf;
@@ -63,134 +64,167 @@ TestCase::GetVerbose ()
void
TestCase::Loop ()
{
- SBEvent evt;
while (true)
{
- m_listener.WaitForEvent (UINT32_MAX,evt);
- StateType state = SBProcess::GetStateFromEvent (evt);
- if (m_verbose)
- printf("event = %s\n",SBDebugger::StateAsCString(state));
- if (SBProcess::GetRestartedFromEvent(evt))
- continue;
- switch (state)
- {
- case eStateInvalid:
- case eStateDetached:
- case eStateCrashed:
- case eStateUnloaded:
- break;
- case eStateExited:
- return;
- case eStateConnected:
- case eStateAttaching:
- case eStateLaunching:
- case eStateRunning:
- case eStateStepping:
- continue;
- case eStateStopped:
- case eStateSuspended:
- {
- bool fatal = false;
- bool selected_thread = false;
- for (auto thread_index = 0; thread_index < m_process.GetNumThreads(); thread_index++)
- {
- SBThread thread(m_process.GetThreadAtIndex(thread_index));
- SBFrame frame(thread.GetFrameAtIndex(0));
- bool select_thread = false;
- StopReason stop_reason = thread.GetStopReason();
- if (m_verbose) printf("tid = 0x%llx pc = 0x%llx ",thread.GetThreadID(),frame.GetPC());
- switch (stop_reason)
- {
- case eStopReasonNone:
- if (m_verbose) printf("none\n");
- break;
-
- case eStopReasonTrace:
- select_thread = true;
- if (m_verbose) printf("trace\n");
- break;
-
- case eStopReasonPlanComplete:
- select_thread = true;
- if (m_verbose) printf("plan complete\n");
- break;
- case eStopReasonThreadExiting:
- if (m_verbose) printf("thread exiting\n");
- break;
- case eStopReasonExec:
- if (m_verbose) printf("exec\n");
- break;
- case eStopReasonInvalid:
- if (m_verbose) printf("invalid\n");
- break;
- case eStopReasonException:
- select_thread = true;
- if (m_verbose) printf("exception\n");
- fatal = true;
- break;
- case eStopReasonBreakpoint:
- select_thread = true;
- if (m_verbose) printf("breakpoint id = %lld.%lld\n",thread.GetStopReasonDataAtIndex(0),thread.GetStopReasonDataAtIndex(1));
- break;
- case eStopReasonWatchpoint:
- select_thread = true;
- if (m_verbose) printf("watchpoint id = %lld\n",thread.GetStopReasonDataAtIndex(0));
- break;
- case eStopReasonSignal:
- select_thread = true;
- if (m_verbose) printf("signal %d\n",(int)thread.GetStopReasonDataAtIndex(0));
- break;
- }
- if (select_thread && !selected_thread)
+ bool call_test_step = false;
+ if (m_process.IsValid())
+ {
+ SBEvent evt;
+ m_listener.WaitForEvent (UINT32_MAX, evt);
+ StateType state = SBProcess::GetStateFromEvent (evt);
+ if (m_verbose)
+ printf("event = %s\n",SBDebugger::StateAsCString(state));
+ if (SBProcess::GetRestartedFromEvent(evt))
+ continue;
+ switch (state)
+ {
+ case eStateInvalid:
+ case eStateDetached:
+ case eStateCrashed:
+ case eStateUnloaded:
+ break;
+ case eStateExited:
+ return;
+ case eStateConnected:
+ case eStateAttaching:
+ case eStateLaunching:
+ case eStateRunning:
+ case eStateStepping:
+ continue;
+ case eStateStopped:
+ case eStateSuspended:
+ {
+ call_test_step = true;
+ bool fatal = false;
+ bool selected_thread = false;
+ for (auto thread_index = 0; thread_index < m_process.GetNumThreads(); thread_index++)
{
- m_thread = thread;
- selected_thread = m_process.SetSelectedThread(thread);
- }
- }
- if (fatal)
- {
- if (m_verbose) Xcode::RunCommand(m_debugger,"bt all",true);
- exit(1);
- }
- if (m_verbose)
- printf("RUNNING STEP %d\n",m_step);
- ActionWanted action;
- TestStep(m_step, action);
- m_step++;
- SBError err;
- switch (action.type)
- {
- case ActionWanted::Type::eContinue:
- err = m_process.Continue();
- break;
- case ActionWanted::Type::eStepOut:
- if (action.thread.IsValid() == false)
+ SBThread thread(m_process.GetThreadAtIndex(thread_index));
+ SBFrame frame(thread.GetFrameAtIndex(0));
+ bool select_thread = false;
+ StopReason stop_reason = thread.GetStopReason();
+ if (m_verbose) printf("tid = 0x%llx pc = 0x%llx ",thread.GetThreadID(),frame.GetPC());
+ switch (stop_reason)
{
- if (m_verbose) Xcode::RunCommand(m_debugger,"bt all",true);
- if (m_verbose) printf("[finish invalid] I am gonna die at step %d\n",m_step);
- exit(501);
+ case eStopReasonNone:
+ if (m_verbose)
+ printf("none\n");
+ break;
+
+ case eStopReasonTrace:
+ select_thread = true;
+ if (m_verbose)
+ printf("trace\n");
+ break;
+
+ case eStopReasonPlanComplete:
+ select_thread = true;
+ if (m_verbose)
+ printf("plan complete\n");
+ break;
+ case eStopReasonThreadExiting:
+ if (m_verbose)
+ printf("thread exiting\n");
+ break;
+ case eStopReasonExec:
+ if (m_verbose)
+ printf("exec\n");
+ break;
+ case eStopReasonInvalid:
+ if (m_verbose)
+ printf("invalid\n");
+ break;
+ case eStopReasonException:
+ select_thread = true;
+ if (m_verbose)
+ printf("exception\n");
+ fatal = true;
+ break;
+ case eStopReasonBreakpoint:
+ select_thread = true;
+ if (m_verbose)
+ printf("breakpoint id = %lld.%lld\n",thread.GetStopReasonDataAtIndex(0),thread.GetStopReasonDataAtIndex(1));
+ break;
+ case eStopReasonWatchpoint:
+ select_thread = true;
+ if (m_verbose)
+ printf("watchpoint id = %lld\n",thread.GetStopReasonDataAtIndex(0));
+ break;
+ case eStopReasonSignal:
+ select_thread = true;
+ if (m_verbose)
+ printf("signal %d\n",(int)thread.GetStopReasonDataAtIndex(0));
+ break;
}
- m_process.SetSelectedThread(action.thread);
- action.thread.StepOut();
- break;
- case ActionWanted::Type::eNext:
- if (action.thread.IsValid() == false)
+ if (select_thread && !selected_thread)
{
- if (m_verbose) Xcode::RunCommand(m_debugger,"bt all",true);
- if (m_verbose) printf("[next invalid] I am gonna die at step %d\n",m_step);
- exit(500);
+ m_thread = thread;
+ selected_thread = m_process.SetSelectedThread(thread);
}
- m_process.SetSelectedThread(action.thread);
- action.thread.StepOver();
- break;
- case ActionWanted::Type::eKill:
- if (m_verbose) printf("I want to die\n");
- m_process.Kill();
- return;
- }
+ }
+ if (fatal)
+ {
+ if (m_verbose) Xcode::RunCommand(m_debugger,"bt all",true);
+ exit(1);
+ }
+ }
+ break;
}
}
+ else
+ {
+ call_test_step = true;
+ }
+
+ if (call_test_step)
+ {
+ if (m_verbose)
+ printf("RUNNING STEP %d\n",m_step);
+ ActionWanted action;
+ TestStep(m_step, action);
+ m_step++;
+ SBError err;
+ switch (action.type)
+ {
+ case ActionWanted::Type::eContinue:
+ err = m_process.Continue();
+ break;
+ case ActionWanted::Type::eStepOut:
+ if (action.thread.IsValid() == false)
+ {
+ if (m_verbose)
+ {
+ Xcode::RunCommand(m_debugger,"bt all",true);
+ printf("error: invalid thread for step out on step %d\n", m_step);
+ }
+ exit(501);
+ }
+ m_process.SetSelectedThread(action.thread);
+ action.thread.StepOut();
+ break;
+ case ActionWanted::Type::eStepOver:
+ if (action.thread.IsValid() == false)
+ {
+ if (m_verbose)
+ {
+ Xcode::RunCommand(m_debugger,"bt all",true);
+ printf("error: invalid thread for step over %d\n",m_step);
+ }
+ exit(500);
+ }
+ m_process.SetSelectedThread(action.thread);
+ action.thread.StepOver();
+ break;
+ case ActionWanted::Type::eKill:
+ if (m_verbose)
+ printf("kill\n");
+ m_process.Kill();
+ return;
+ }
+ }
+
}
+
if (GetVerbose()) printf("I am gonna die at step %d\n",m_step);
}
@@ -200,6 +234,8 @@ TestCase::Run (TestCase& test, int argc,
if (test.Setup(argc, argv))
{
test.Loop();
- test.Results();
+ Results results;
+ test.WriteResults(results);
}
}
+
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=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/TestCase.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/TestCase.h Thu Mar 21 21:31:35 2013
@@ -13,8 +13,10 @@
#include "lldb/API/LLDB.h"
#include "Measurement.h"
-namespace lldb_perf
-{
+namespace lldb_perf {
+
+class Results;
+
class TestCase
{
public:
@@ -24,7 +26,7 @@ public:
{
enum class Type
{
- eNext,
+ eStepOver,
eContinue,
eStepOut,
eKill
@@ -47,7 +49,7 @@ public:
void
StepOver (lldb::SBThread t)
{
- type = Type::eNext;
+ type = Type::eStepOver;
thread = t;
}
@@ -90,7 +92,7 @@ public:
GetVerbose ();
virtual void
- Results () = 0;
+ WriteResults (Results &results) = 0;
template <typename G,typename A>
Measurement<G,A> CreateMeasurement (A a, const char* name = NULL, const char* description = NULL)
Modified: lldb/trunk/tools/lldb-perf/lib/Timer.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Timer.cpp?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Timer.cpp (original)
+++ lldb/trunk/tools/lldb-perf/lib/Timer.cpp Thu Mar 21 21:31:35 2013
@@ -10,6 +10,9 @@
#include "Timer.h"
#include <assert.h>
+#include "CFCMutableDictionary.h"
+#include "CFCString.h"
+
using namespace lldb_perf;
TimeGauge::TimeType
@@ -19,7 +22,7 @@ TimeGauge::Now ()
}
TimeGauge::TimeGauge () :
-m_start(),
+ m_start(),
m_state(TimeGauge::State::eNeverUsed)
{
}
@@ -34,15 +37,28 @@ TimeGauge::Start ()
double
TimeGauge::Stop ()
{
- auto stop = Now();
+ m_stop = Now();
assert(m_state == TimeGauge::State::eCounting && "cannot stop a non-started clock");
m_state = TimeGauge::State::eStopped;
- return (m_value = duration_cast<duration<double>>(stop-m_start).count());
+ m_delta = duration_cast<duration<double>>(m_stop-m_start).count();
+ return m_delta;
+}
+
+double
+TimeGauge::GetStartValue () const
+{
+ return (double)m_start.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den;
+}
+
+double
+TimeGauge::GetStopValue () const
+{
+ return (double)m_stop.time_since_epoch().count() * (double)system_clock::period::num / (double)system_clock::period::den;
}
double
-TimeGauge::GetValue ()
+TimeGauge::GetDeltaValue () const
{
assert(m_state == TimeGauge::State::eStopped && "clock must be used before you can evaluate it");
- return m_value;
+ return m_delta;
}
Modified: lldb/trunk/tools/lldb-perf/lib/Timer.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lib/Timer.h?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lib/Timer.h (original)
+++ lldb/trunk/tools/lldb-perf/lib/Timer.h Thu Mar 21 21:31:35 2013
@@ -20,6 +20,29 @@ namespace lldb_perf
{
class TimeGauge : public Gauge<double>
{
+public:
+ TimeGauge ();
+
+ virtual
+ ~TimeGauge ()
+ {
+ }
+
+ void
+ Start ();
+
+ double
+ Stop ();
+
+ virtual double
+ GetStartValue () const;
+
+ virtual double
+ GetStopValue () const;
+
+ virtual double
+ GetDeltaValue () const;
+
private:
enum class State
{
@@ -30,28 +53,13 @@ private:
typedef high_resolution_clock::time_point TimeType;
TimeType m_start;
- double m_value;
+ TimeType m_stop;
+ double m_delta;
State m_state;
TimeType
Now ();
-public:
- TimeGauge ();
-
- virtual
- ~TimeGauge ()
- {
- }
-
- void
- Start ();
-
- double
- Stop ();
-
- double
- GetValue ();
};
}
Modified: lldb/trunk/tools/lldb-perf/lldbperf.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-perf/lldbperf.xcodeproj/project.pbxproj?rev=177696&r1=177695&r2=177696&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-perf/lldbperf.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/tools/lldb-perf/lldbperf.xcodeproj/project.pbxproj Thu Mar 21 21:31:35 2013
@@ -28,6 +28,9 @@
26DBAD6316FA66DC008243D2 /* liblldbperf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C1E373916F4035D00FF10BB /* liblldbperf.a */; };
26DBAD6416FA66E0008243D2 /* LLDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 264B3DE816F7E47600D1E7AB /* LLDB.framework */; };
26DBAD6516FA66EA008243D2 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C1E37DB16F7A03900FF10BB /* CoreFoundation.framework */; };
+ 26DF762916FBCE7100B4CC2E /* Results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26DF762716FBCE7100B4CC2E /* Results.cpp */; };
+ 26DF762A16FBCE7100B4CC2E /* Results.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DF762816FBCE7100B4CC2E /* Results.h */; };
+ 26DF764316FBF30E00B4CC2E /* Gauge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26DF764216FBF30E00B4CC2E /* Gauge.cpp */; };
4C1E374E16F407C800FF10BB /* Gauge.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C1E374216F407C800FF10BB /* Gauge.h */; };
4C1E374F16F407C800FF10BB /* Measurement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C1E374316F407C800FF10BB /* Measurement.h */; };
4C1E375016F407C800FF10BB /* MemoryGauge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E374416F407C800FF10BB /* MemoryGauge.cpp */; };
@@ -67,7 +70,6 @@
4CE3707516FB703B00BFD501 /* liblldbperf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C1E373916F4035D00FF10BB /* liblldbperf.a */; };
4CE3707616FB704300BFD501 /* LLDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 264B3DE816F7E47600D1E7AB /* LLDB.framework */; };
4CE3707716FB704B00BFD501 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C1E37DB16F7A03900FF10BB /* CoreFoundation.framework */; };
- 4CE3708816FB70EB00BFD501 /* stepping-testcase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CE3708716FB70E100BFD501 /* stepping-testcase.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -201,6 +203,9 @@
26DBAD4816FA637D008243D2 /* build-clang.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "build-clang.sh"; sourceTree = "<group>"; };
26DBAD4916FA637D008243D2 /* lldb_perf_clang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = lldb_perf_clang.cpp; sourceTree = "<group>"; };
26DBAD5916FA63B1008243D2 /* lldb-perf-clang */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "lldb-perf-clang"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 26DF762716FBCE7100B4CC2E /* Results.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Results.cpp; sourceTree = "<group>"; };
+ 26DF762816FBCE7100B4CC2E /* Results.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Results.h; sourceTree = "<group>"; };
+ 26DF764216FBF30E00B4CC2E /* Gauge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gauge.cpp; sourceTree = "<group>"; };
4C1E373916F4035D00FF10BB /* liblldbperf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liblldbperf.a; sourceTree = BUILT_PRODUCTS_DIR; };
4C1E374216F407C800FF10BB /* Gauge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gauge.h; sourceTree = "<group>"; };
4C1E374316F407C800FF10BB /* Measurement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Measurement.h; sourceTree = "<group>"; };
@@ -240,7 +245,7 @@
4C86C5C416F7A36A00844407 /* LLDB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LLDB.framework; path = build/Debug/LLDB.framework; sourceTree = "<group>"; };
4C86C5C616F7A37800844407 /* LLDB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LLDB.framework; path = build/Debug/LLDB.framework; sourceTree = "<group>"; };
4C86C5D116F7CC8900844407 /* format-tester */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "format-tester"; sourceTree = BUILT_PRODUCTS_DIR; };
- 4CE3705416FB6FA100BFD501 /* lldb-step-test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "lldb-step-test"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4CE3705416FB6FA100BFD501 /* lldb-perf-step */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "lldb-perf-step"; sourceTree = BUILT_PRODUCTS_DIR; };
4CE3705616FB6FA100BFD501 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
4CE3705816FB6FA100BFD501 /* lldb_step_test.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = lldb_step_test.1; sourceTree = "<group>"; };
4CE3707216FB701000BFD501 /* lldb-perf-stepping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "lldb-perf-stepping.cpp"; path = "stepping/lldb-perf-stepping.cpp"; sourceTree = "<group>"; };
@@ -356,7 +361,7 @@
4C1E37BA16F79E9D00FF10BB /* lldb-perf-formatters */,
4C86C5D116F7CC8900844407 /* format-tester */,
26DBAD5916FA63B1008243D2 /* lldb-perf-clang */,
- 4CE3705416FB6FA100BFD501 /* lldb-step-test */,
+ 4CE3705416FB6FA100BFD501 /* lldb-perf-step */,
4CE3707C16FB70AD00BFD501 /* stepping-testcase */,
);
name = Products;
@@ -366,11 +371,14 @@
isa = PBXGroup;
children = (
4C1E374216F407C800FF10BB /* Gauge.h */,
+ 26DF764216FBF30E00B4CC2E /* Gauge.cpp */,
4C1E374316F407C800FF10BB /* Measurement.h */,
4C1E374416F407C800FF10BB /* MemoryGauge.cpp */,
4C1E374516F407C800FF10BB /* MemoryGauge.h */,
4C1E374616F407C800FF10BB /* Metric.cpp */,
4C1E374716F407C800FF10BB /* Metric.h */,
+ 26DF762716FBCE7100B4CC2E /* Results.cpp */,
+ 26DF762816FBCE7100B4CC2E /* Results.h */,
4C1E374816F407C800FF10BB /* TestCase.cpp */,
4C1E374916F407C800FF10BB /* TestCase.h */,
4C1E374A16F407C800FF10BB /* Timer.cpp */,
@@ -493,6 +501,7 @@
buildActionMask = 2147483647;
files = (
4C1E375716F407C800FF10BB /* Timer.h in Headers */,
+ 26DF762A16FBCE7100B4CC2E /* Results.h in Headers */,
4C1E378D16F40BB300FF10BB /* CFCMutableArray.h in Headers */,
4C1E374E16F407C800FF10BB /* Gauge.h in Headers */,
4C1E378716F40B9C00FF10BB /* CFCReleaser.h in Headers */,
@@ -613,7 +622,7 @@
);
name = "lldb-perf-step";
productName = "lldb-step-test";
- productReference = 4CE3705416FB6FA100BFD501 /* lldb-step-test */;
+ productReference = 4CE3705416FB6FA100BFD501 /* lldb-perf-step */;
productType = "com.apple.product-type.tool";
};
4CE3707B16FB70AD00BFD501 /* stepping-testcase */ = {
@@ -742,11 +751,13 @@
4C1E375016F407C800FF10BB /* MemoryGauge.cpp in Sources */,
4C1E375416F407C800FF10BB /* TestCase.cpp in Sources */,
4C1E375816F407C800FF10BB /* Xcode.cpp in Sources */,
+ 26DF762916FBCE7100B4CC2E /* Results.cpp in Sources */,
4C1E375216F407C800FF10BB /* Metric.cpp in Sources */,
4C1E375616F407C800FF10BB /* Timer.cpp in Sources */,
4C1E378616F40B9600FF10BB /* CFCMutableSet.cpp in Sources */,
4C1E378516F40B9200FF10BB /* CFCMutableDictionary.cpp in Sources */,
4C1E378816F40B9F00FF10BB /* CFCString.cpp in Sources */,
+ 26DF764316FBF30E00B4CC2E /* Gauge.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -786,7 +797,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4CE3708816FB70EB00BFD501 /* stepping-testcase.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -850,6 +860,7 @@
"$(inherited)",
"$(SRCROOT)/../../build/Debug",
);
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@@ -870,6 +881,7 @@
"$(inherited)",
"$(SRCROOT)/../../build/Debug",
);
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
OTHER_LDFLAGS = "-Wl,-rpath, at loader_path/../../../../build/Debug";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
@@ -962,6 +974,7 @@
"$(inherited)",
"$(SRCROOT)/../../build/Debug",
);
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@@ -979,6 +992,7 @@
"$(inherited)",
"$(SRCROOT)/../../build/Debug",
);
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
OTHER_LDFLAGS = "-Wl,-rpath, at loader_path/../../../../build/Debug";
PRODUCT_NAME = "$(TARGET_NAME)";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../include $(SRCROOT)/../../source/Host/macosx/cfcpp $(SRCROOT)/../";
@@ -992,6 +1006,7 @@
"$(inherited)",
"$(SRCROOT)/../../build/Debug",
);
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@@ -1009,6 +1024,7 @@
"$(inherited)",
"$(SRCROOT)/../../build/Debug",
);
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
OTHER_LDFLAGS = "-Wl,-rpath, at loader_path/../../../../build/Debug";
PRODUCT_NAME = "$(TARGET_NAME)";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../ $(SRCROOT)/../../include/";
@@ -1032,6 +1048,7 @@
4C86C5D816F7CC8900844407 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@@ -1043,6 +1060,7 @@
4C86C5D916F7CC8900844407 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
@@ -1051,6 +1069,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@@ -1058,6 +1077,7 @@
MACOSX_DEPLOYMENT_TARGET = 10.9;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../ $(SRCROOT)/../../include/";
};
name = Debug;
};
@@ -1065,9 +1085,11 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
MACOSX_DEPLOYMENT_TARGET = 10.9;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../ $(SRCROOT)/../../include/";
};
name = Release;
};
@@ -1168,6 +1190,7 @@
4CE3705B16FB6FA100BFD501 /* Release */,
);
defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
};
4CE3708216FB70AD00BFD501 /* Build configuration list for PBXNativeTarget "stepping-testcase" */ = {
isa = XCConfigurationList;
@@ -1176,6 +1199,7 @@
4CE3708416FB70AD00BFD501 /* Release */,
);
defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
More information about the lldb-commits
mailing list