aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-perf/darwin/formatters
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-perf/darwin/formatters')
-rw-r--r--tools/lldb-perf/darwin/formatters/fmts_tester.mm79
-rw-r--r--tools/lldb-perf/darwin/formatters/formatters.cpp246
2 files changed, 325 insertions, 0 deletions
diff --git a/tools/lldb-perf/darwin/formatters/fmts_tester.mm b/tools/lldb-perf/darwin/formatters/fmts_tester.mm
new file mode 100644
index 000000000000..57ce008297d9
--- /dev/null
+++ b/tools/lldb-perf/darwin/formatters/fmts_tester.mm
@@ -0,0 +1,79 @@
+//===-- fmts_tester.cpp -----------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+
+#import <Cocoa/Cocoa.h>
+#include <vector>
+#include <list>
+#include <map>
+#include <string>
+
+int main()
+{
+ NSArray* nsarray = @[@1,@2,@"hello world",@3,@4,@"foobar"];
+ NSMutableArray* nsmutablearray = [[NSMutableArray alloc] initWithCapacity:5];
+ [nsmutablearray addObject:@1];
+ [nsmutablearray addObject:@2];
+ [nsmutablearray addObject:@"hello world"];
+ [nsmutablearray addObject:@3];
+ [nsmutablearray addObject:@4];
+ [nsmutablearray addObject:@"foobar"];
+ NSDictionary* nsdictionary = @{@1 : @1, @2 : @2, @"hello" : @"world", @3 : @3};
+ NSMutableDictionary* nsmutabledictionary = [[NSMutableDictionary alloc] initWithCapacity:5];
+ [nsmutabledictionary setObject:@1 forKey:@1];
+ [nsmutabledictionary setObject:@2 forKey:@2];
+ [nsmutabledictionary setObject:@"hello" forKey:@"world"];
+ [nsmutabledictionary setObject:@3 forKey:@3];
+ NSString* str0 = @"Hello world";
+ NSString* str1 = @"Hello ℥";
+ NSString* str2 = @"Hello world";
+ NSString* str3 = @"Hello ℥";
+ NSString* str4 = @"Hello world";
+ NSDate* me = [NSDate dateWithNaturalLanguageString:@"April 10, 1985"];
+ NSDate* cutie = [NSDate dateWithNaturalLanguageString:@"January 29, 1983"];
+ NSDate* mom = [NSDate dateWithNaturalLanguageString:@"May 24, 1959"];
+ NSDate* dad = [NSDate dateWithNaturalLanguageString:@"October 29, 1954"];
+ NSDate* today = [NSDate dateWithNaturalLanguageString:@"March 14, 2013"];
+ NSArray* bundles = [NSBundle allBundles];
+ NSArray* frameworks = [NSBundle allFrameworks];
+ NSSet* nsset = [NSSet setWithArray:nsarray];
+ NSMutableSet* nsmutableset = [NSMutableSet setWithCapacity:5];
+ [nsmutableset addObject:@1];
+ [nsmutableset addObject:@2];
+ [nsmutableset addObject:@"hello world"];
+ [nsmutableset addObject:@3];
+ [nsmutableset addObject:@4];
+ [nsmutableset addObject:@"foobar"];
+ std::vector<int> vector;
+ vector.push_back(1);
+ vector.push_back(2);
+ vector.push_back(3);
+ vector.push_back(4);
+ vector.push_back(5);
+ std::list<int> list;
+ list.push_back(1);
+ list.push_back(2);
+ list.push_back(3);
+ list.push_back(4);
+ list.push_back(5);
+ std::map<int,int> map;
+ map[1] = 1;
+ map[2] = 2;
+ map[3] = 3;
+ map[4] = 4;
+ map[5] = 5;
+ std::string sstr0("Hello world");
+ std::string sstr1("Hello world");
+ std::string sstr2("Hello world");
+ std::string sstr3("Hello world");
+ std::string sstr4("Hello world");
+ int x = 0;
+ for (;;)
+ x++;
+} \ No newline at end of file
diff --git a/tools/lldb-perf/darwin/formatters/formatters.cpp b/tools/lldb-perf/darwin/formatters/formatters.cpp
new file mode 100644
index 000000000000..ee3875618427
--- /dev/null
+++ b/tools/lldb-perf/darwin/formatters/formatters.cpp
@@ -0,0 +1,246 @@
+//===-- formatters.cpp ------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#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/TestCase.h"
+#include "lldb-perf/lib/Xcode.h"
+
+#include <iostream>
+#include <unistd.h>
+#include <fstream>
+
+using namespace lldb_perf;
+
+class FormattersTest : public TestCase
+{
+public:
+ FormattersTest () : TestCase()
+ {
+ m_dump_std_vector_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "std-vector", "time to dump an std::vector");
+ m_dump_std_list_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "std-list", "time to dump an std::list");
+ m_dump_std_map_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "std-map", "time to dump an std::map");
+
+ // use this in manual mode
+ m_dump_std_string_measurement = CreateTimeMeasurement([] () -> void {
+ }, "std-string", "time to dump an std::string");
+
+ m_dump_nsstring_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,0,false);
+ }, "ns-string", "time to dump an NSString");
+
+ m_dump_nsarray_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "ns-array", "time to dump an NSArray");
+
+ m_dump_nsdictionary_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "ns-dictionary", "time to dump an NSDictionary");
+
+ m_dump_nsset_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "ns-set", "time to dump an NSSet");
+
+ m_dump_nsbundle_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,1,false);
+ }, "ns-bundle", "time to dump an NSBundle");
+
+ m_dump_nsdate_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb_perf::Xcode::FetchVariable (value,0,false);
+ }, "ns-date", "time to dump an NSDate");
+ }
+
+ virtual
+ ~FormattersTest ()
+ {
+ }
+
+ virtual bool
+ Setup (int& argc, const char**& argv)
+ {
+ m_app_path.assign(argv[1]);
+ m_out_path.assign(argv[2]);
+ m_target = m_debugger.CreateTarget(m_app_path.c_str());
+ m_target.BreakpointCreateByName("main");
+ SBLaunchInfo launch_info(argv);
+ return Launch (launch_info);
+ }
+
+ void
+ DoTest ()
+ {
+ SBFrame frame_zero(m_thread.GetFrameAtIndex(0));
+
+ m_dump_nsarray_measurement(frame_zero.FindVariable("nsarray", lldb::eDynamicCanRunTarget));
+ m_dump_nsarray_measurement(frame_zero.FindVariable("nsmutablearray", lldb::eDynamicCanRunTarget));
+
+ m_dump_nsdictionary_measurement(frame_zero.FindVariable("nsdictionary", lldb::eDynamicCanRunTarget));
+ m_dump_nsdictionary_measurement(frame_zero.FindVariable("nsmutabledictionary", lldb::eDynamicCanRunTarget));
+
+ m_dump_nsstring_measurement(frame_zero.FindVariable("str0", lldb::eDynamicCanRunTarget));
+ m_dump_nsstring_measurement(frame_zero.FindVariable("str1", lldb::eDynamicCanRunTarget));
+ m_dump_nsstring_measurement(frame_zero.FindVariable("str2", lldb::eDynamicCanRunTarget));
+ m_dump_nsstring_measurement(frame_zero.FindVariable("str3", lldb::eDynamicCanRunTarget));
+ m_dump_nsstring_measurement(frame_zero.FindVariable("str4", lldb::eDynamicCanRunTarget));
+
+ m_dump_nsdate_measurement(frame_zero.FindVariable("me", lldb::eDynamicCanRunTarget));
+ m_dump_nsdate_measurement(frame_zero.FindVariable("cutie", lldb::eDynamicCanRunTarget));
+ m_dump_nsdate_measurement(frame_zero.FindVariable("mom", lldb::eDynamicCanRunTarget));
+ m_dump_nsdate_measurement(frame_zero.FindVariable("dad", lldb::eDynamicCanRunTarget));
+ m_dump_nsdate_measurement(frame_zero.FindVariable("today", lldb::eDynamicCanRunTarget));
+
+ m_dump_nsbundle_measurement(frame_zero.FindVariable("bundles", lldb::eDynamicCanRunTarget));
+ m_dump_nsbundle_measurement(frame_zero.FindVariable("frameworks", lldb::eDynamicCanRunTarget));
+
+ m_dump_nsset_measurement(frame_zero.FindVariable("nsset", lldb::eDynamicCanRunTarget));
+ m_dump_nsset_measurement(frame_zero.FindVariable("nsmutableset", lldb::eDynamicCanRunTarget));
+
+ m_dump_std_vector_measurement(frame_zero.FindVariable("vector", lldb::eDynamicCanRunTarget));
+ m_dump_std_list_measurement(frame_zero.FindVariable("list", lldb::eDynamicCanRunTarget));
+ m_dump_std_map_measurement(frame_zero.FindVariable("map", lldb::eDynamicCanRunTarget));
+
+ auto sstr0 = frame_zero.FindVariable("sstr0", lldb::eDynamicCanRunTarget);
+ auto sstr1 = frame_zero.FindVariable("sstr1", lldb::eDynamicCanRunTarget);
+ auto sstr2 = frame_zero.FindVariable("sstr2", lldb::eDynamicCanRunTarget);
+ auto sstr3 = frame_zero.FindVariable("sstr3", lldb::eDynamicCanRunTarget);
+ auto sstr4 = frame_zero.FindVariable("sstr4", lldb::eDynamicCanRunTarget);
+
+ m_dump_std_string_measurement.Start();
+ Xcode::FetchVariable(sstr0,0,false);
+ m_dump_std_string_measurement.Stop();
+
+ m_dump_std_string_measurement.Start();
+ Xcode::FetchVariable(sstr1,0,false);
+ m_dump_std_string_measurement.Stop();
+
+ m_dump_std_string_measurement.Start();
+ Xcode::FetchVariable(sstr2,0,false);
+ m_dump_std_string_measurement.Stop();
+
+ m_dump_std_string_measurement.Start();
+ Xcode::FetchVariable(sstr3,0,false);
+ m_dump_std_string_measurement.Stop();
+
+ m_dump_std_string_measurement.Start();
+ Xcode::FetchVariable(sstr4,0,false);
+ m_dump_std_string_measurement.Stop();
+
+ }
+
+ virtual void
+ TestStep (int counter, ActionWanted &next_action)
+ {
+ switch (counter)
+ {
+ case 0:
+ m_target.BreakpointCreateByLocation("fmts_tester.mm", 78);
+ next_action.Continue();
+ break;
+ case 1:
+ DoTest ();
+ next_action.Continue();
+ break;
+ case 2:
+ DoTest ();
+ next_action.Continue();
+ 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();
+ break;
+ default:
+ next_action.Kill();
+ break;
+ }
+ }
+
+ virtual void
+ WriteResults (Results &results)
+ {
+ m_dump_std_vector_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_std_list_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_std_map_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_std_string_measurement.WriteAverageAndStandardDeviation(results);
+
+ m_dump_nsstring_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_nsarray_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_nsdictionary_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_nsset_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_nsbundle_measurement.WriteAverageAndStandardDeviation(results);
+ m_dump_nsdate_measurement.WriteAverageAndStandardDeviation(results);
+ results.Write(m_out_path.c_str());
+ }
+
+private:
+ // C++ formatters
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_std_vector_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_std_list_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_std_map_measurement;
+ TimeMeasurement<std::function<void()>> m_dump_std_string_measurement;
+
+ // Cocoa formatters
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_nsstring_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_nsarray_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_nsdictionary_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_nsset_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_nsbundle_measurement;
+ TimeMeasurement<std::function<void(SBValue)>> m_dump_nsdate_measurement;
+
+ // useful files
+ std::string m_app_path;
+ std::string m_out_path;
+};
+
+// argv[1] == path to app
+// argv[2] == path to result
+int main(int argc, const char * argv[])
+{
+ FormattersTest frmtest;
+ frmtest.SetVerbose(true);
+ TestCase::Run(frmtest,argc,argv);
+ return 0;
+}
+