summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/lldb.xcodeproj/project.pbxproj165
-rw-r--r--lldb/tools/lldb-perf/darwin/formatters/fmts_tester.mm69
-rw-r--r--lldb/tools/lldb-perf/darwin/formatters/main.cpp260
-rw-r--r--lldb/tools/lldb-perf/darwin/sketch/foobar.sketch2bin0 -> 10027 bytes
-rw-r--r--lldb/tools/lldb-perf/darwin/sketch/main.cpp14
-rw-r--r--lldb/tools/lldb-perf/lib/Measurement.h53
-rw-r--r--lldb/tools/lldb-perf/lib/Metric.cpp16
-rw-r--r--lldb/tools/lldb-perf/lib/Metric.h6
-rw-r--r--lldb/tools/lldb-perf/lib/TestCase.cpp10
-rw-r--r--lldb/tools/lldb-perf/lib/TestCase.h10
-rw-r--r--lldb/tools/lldb-perf/lib/Xcode.cpp2
11 files changed, 581 insertions, 24 deletions
diff --git a/lldb/lldb.xcodeproj/project.pbxproj b/lldb/lldb.xcodeproj/project.pbxproj
index cb51b0be0ef..a0e8ed3e9c9 100644
--- a/lldb/lldb.xcodeproj/project.pbxproj
+++ b/lldb/lldb.xcodeproj/project.pbxproj
@@ -585,6 +585,10 @@
94D6A0AA16CEB55F00833B6E /* NSArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94D6A0A716CEB55F00833B6E /* NSArray.cpp */; };
94D6A0AB16CEB55F00833B6E /* NSDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94D6A0A816CEB55F00833B6E /* NSDictionary.cpp */; };
94D6A0AC16CEB55F00833B6E /* NSSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94D6A0A916CEB55F00833B6E /* NSSet.cpp */; };
+ 94DB610216EA89B800459D9E /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26F5C39010F3FA26009D5894 /* CoreFoundation.framework */; };
+ 94DB610316EA89BD00459D9E /* LLDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26680207115FD0ED008E1FE4 /* LLDB.framework */; };
+ 94DB610416EA89BD00459D9E /* lldbperf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 940DB89A16EA5F4200D3C2F1 /* lldbperf.a */; };
+ 94DB610516EA89C000459D9E /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94DB60F016EA888A00459D9E /* main.cpp */; };
94EA1D5C15E6C9B400D4171A /* PythonDataObjects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94EA1D5B15E6C9B400D4171A /* PythonDataObjects.cpp */; };
94FA3DE01405D50400833217 /* ValueObjectConstResultChild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94FA3DDF1405D50300833217 /* ValueObjectConstResultChild.cpp */; };
9A19A6AF1163BBB200E0D453 /* SBValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A19A6A51163BB7E00E0D453 /* SBValue.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -741,6 +745,13 @@
remoteGlobalIDString = 940DB89916EA5F4200D3C2F1;
remoteInfo = lldbperf;
};
+ 94DB610016EA89AE00459D9E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 940DB89916EA5F4200D3C2F1;
+ remoteInfo = lldbperf;
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -753,6 +764,15 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 94DB60F316EA897F00459D9E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
AF90106415AB7D2900FF120D /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -1666,6 +1686,8 @@
94D6A0A716CEB55F00833B6E /* NSArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NSArray.cpp; path = source/DataFormatters/NSArray.cpp; sourceTree = "<group>"; };
94D6A0A816CEB55F00833B6E /* NSDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NSDictionary.cpp; path = source/DataFormatters/NSDictionary.cpp; sourceTree = "<group>"; };
94D6A0A916CEB55F00833B6E /* NSSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NSSet.cpp; path = source/DataFormatters/NSSet.cpp; sourceTree = "<group>"; };
+ 94DB60F016EA888A00459D9E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
+ 94DB60F516EA897F00459D9E /* lldb-perf-formatters */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "lldb-perf-formatters"; sourceTree = BUILT_PRODUCTS_DIR; };
94E367CC140C4EC4001C7A5A /* modify-python-lldb.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = "modify-python-lldb.py"; sourceTree = "<group>"; };
94E367CE140C4EEA001C7A5A /* python-typemaps.swig */ = {isa = PBXFileReference; lastKnownFileType = text; path = "python-typemaps.swig"; sourceTree = "<group>"; };
94EA1D5A15E6C99B00D4171A /* PythonDataObjects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PythonDataObjects.h; path = include/lldb/Interpreter/PythonDataObjects.h; sourceTree = "<group>"; };
@@ -1859,6 +1881,16 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 94DB60F216EA897F00459D9E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 94DB610216EA89B800459D9E /* CoreFoundation.framework in Frameworks */,
+ 94DB610316EA89BD00459D9E /* LLDB.framework in Frameworks */,
+ 94DB610416EA89BD00459D9E /* lldbperf.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
EDC6D49614E5C19B001B75F8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -1928,6 +1960,7 @@
EDE274EC14EDCE1F005B0F75 /* com.apple.lldb.launcherRootXPCService.xpc */,
940DB89A16EA5F4200D3C2F1 /* lldbperf.a */,
940DB8AD16EA60C900D3C2F1 /* lldb-perf-sketch */,
+ 94DB60F516EA897F00459D9E /* lldb-perf-formatters */,
);
name = Products;
sourceTree = "<group>";
@@ -3476,6 +3509,7 @@
940DB8C616EA654E00D3C2F1 /* darwin */ = {
isa = PBXGroup;
children = (
+ 940DB8FB16EA84BF00D3C2F1 /* formatters */,
940DB8C716EA655400D3C2F1 /* sketch */,
);
path = darwin;
@@ -3489,6 +3523,14 @@
path = sketch;
sourceTree = "<group>";
};
+ 940DB8FB16EA84BF00D3C2F1 /* formatters */ = {
+ isa = PBXGroup;
+ children = (
+ 94DB60F016EA888A00459D9E /* main.cpp */,
+ );
+ path = formatters;
+ sourceTree = "<group>";
+ };
94CB255616B0683B0059775D /* DataFormatters */ = {
isa = PBXGroup;
children = (
@@ -3812,6 +3854,24 @@
productReference = 940DB8AD16EA60C900D3C2F1 /* lldb-perf-sketch */;
productType = "com.apple.product-type.tool";
};
+ 94DB60F416EA897F00459D9E /* lldb-perf-formatters */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 94DB60FB16EA897F00459D9E /* Build configuration list for PBXNativeTarget "lldb-perf-formatters" */;
+ buildPhases = (
+ 94DB60F116EA897F00459D9E /* Sources */,
+ 94DB60F216EA897F00459D9E /* Frameworks */,
+ 94DB60F316EA897F00459D9E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 94DB610116EA89AE00459D9E /* PBXTargetDependency */,
+ );
+ name = "lldb-perf-formatters";
+ productName = "lldb-perf-formatters";
+ productReference = 94DB60F516EA897F00459D9E /* lldb-perf-formatters */;
+ productType = "com.apple.product-type.tool";
+ };
EDC6D49814E5C19B001B75F8 /* launcherXPCService */ = {
isa = PBXNativeTarget;
buildConfigurationList = EDC6D4A614E5C19B001B75F8 /* Build configuration list for PBXNativeTarget "launcherXPCService" */;
@@ -3884,6 +3944,7 @@
2687EAC51508110B00DD8C2E /* install-headers */,
940DB89916EA5F4200D3C2F1 /* lldbperf */,
940DB8AC16EA60C900D3C2F1 /* lldb-perf-sketch */,
+ 94DB60F416EA897F00459D9E /* lldb-perf-formatters */,
);
};
/* End PBXProject section */
@@ -4483,6 +4544,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 94DB60F116EA897F00459D9E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 94DB610516EA89C000459D9E /* main.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
EDC6D49514E5C19B001B75F8 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -4579,6 +4648,11 @@
target = 940DB89916EA5F4200D3C2F1 /* lldbperf */;
targetProxy = 940DB8E816EA72BE00D3C2F1 /* PBXContainerItemProxy */;
};
+ 94DB610116EA89AE00459D9E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 940DB89916EA5F4200D3C2F1 /* lldbperf */;
+ targetProxy = 94DB610016EA89AE00459D9E /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@@ -6063,6 +6137,86 @@
};
name = BuildAndIntegration;
};
+ 94DB60FC16EA897F00459D9E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include $(SRCROOT)/Tools";
+ };
+ name = Debug;
+ };
+ 94DB60FD16EA897F00459D9E /* DebugClang */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include $(SRCROOT)/Tools";
+ };
+ name = DebugClang;
+ };
+ 94DB60FE16EA897F00459D9E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include $(SRCROOT)/Tools $(SRCROOT)/source/Host/macosx/";
+ };
+ name = Release;
+ };
+ 94DB60FF16EA897F00459D9E /* BuildAndIntegration */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source $(LLVM_SOURCE_DIR)/include $(LLVM_SOURCE_DIR)/tools/clang/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/include $(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)/tools/clang/include $(SRCROOT)/Tools $(SRCROOT)/source/Host/macosx/";
+ };
+ name = BuildAndIntegration;
+ };
EDC6D4A714E5C19B001B75F8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6387,6 +6541,17 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = BuildAndIntegration;
};
+ 94DB60FB16EA897F00459D9E /* Build configuration list for PBXNativeTarget "lldb-perf-formatters" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 94DB60FC16EA897F00459D9E /* Debug */,
+ 94DB60FD16EA897F00459D9E /* DebugClang */,
+ 94DB60FE16EA897F00459D9E /* Release */,
+ 94DB60FF16EA897F00459D9E /* BuildAndIntegration */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = BuildAndIntegration;
+ };
EDC6D4A614E5C19B001B75F8 /* Build configuration list for PBXNativeTarget "launcherXPCService" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/lldb/tools/lldb-perf/darwin/formatters/fmts_tester.mm b/lldb/tools/lldb-perf/darwin/formatters/fmts_tester.mm
new file mode 100644
index 00000000000..bfbc54e189f
--- /dev/null
+++ b/lldb/tools/lldb-perf/darwin/formatters/fmts_tester.mm
@@ -0,0 +1,69 @@
+#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/lldb/tools/lldb-perf/darwin/formatters/main.cpp b/lldb/tools/lldb-perf/darwin/formatters/main.cpp
new file mode 100644
index 00000000000..bc55e7827f3
--- /dev/null
+++ b/lldb/tools/lldb-perf/darwin/formatters/main.cpp
@@ -0,0 +1,260 @@
+//
+// main.cpp
+// PerfTestDriver
+//
+// Created by Enrico Granata on 3/6/13.
+// Copyright (c) 2013 Apple Inc. All rights reserved.
+//
+
+#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");
+ m_dump_std_string_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
+ lldb::perf::Xcode::FetchVariable (value,1,false);
+ }, "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 void
+ 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");
+
+ Launch (NULL,".");
+ }
+
+ SBThread
+ SelectMyThread (const char* file_name)
+ {
+ auto threads_count = m_process.GetNumThreads();
+ for (auto thread_num = 0; thread_num < threads_count; thread_num++)
+ {
+ SBThread thread(m_process.GetThreadAtIndex(thread_num));
+ auto local_file_name = thread.GetFrameAtIndex(0).GetCompileUnit().GetFileSpec().GetFilename();
+ if (!local_file_name)
+ continue;
+ if (strcmp(local_file_name,file_name))
+ continue;
+ return thread;
+ }
+ Xcode::RunCommand(m_debugger,"bt all",true);
+ assert(false);
+ }
+
+ void
+ DoTest ()
+ {
+ SBThread thread_main(SelectMyThread("fmts_tester.mm"));
+ SBFrame frame_zero(thread_main.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));
+
+ m_dump_std_string_measurement(frame_zero.FindVariable("sstr0", lldb::eDynamicCanRunTarget));
+ m_dump_std_string_measurement(frame_zero.FindVariable("sstr1", lldb::eDynamicCanRunTarget));
+ m_dump_std_string_measurement(frame_zero.FindVariable("sstr2", lldb::eDynamicCanRunTarget));
+ m_dump_std_string_measurement(frame_zero.FindVariable("sstr3", lldb::eDynamicCanRunTarget));
+ m_dump_std_string_measurement(frame_zero.FindVariable("sstr4", lldb::eDynamicCanRunTarget));
+ }
+
+ virtual ActionWanted
+ TestStep (int counter)
+ {
+#define STEP(n) if (counter == n)
+#define NEXT(s) return TestCase::ActionWanted{TestCase::ActionWanted::Type::eAWNext,SelectMyThread(s)}
+#define FINISH(s) return TestCase::ActionWanted{TestCase::ActionWanted::Type::eAWFinish,SelectMyThread(s)}
+#define CONT return TestCase::ActionWanted{TestCase::ActionWanted::Type::eAWContinue,SBThread()}
+#define KILL return TestCase::ActionWanted{TestCase::ActionWanted::Type::eAWKill,SBThread()}
+ STEP (0)
+ {
+ m_target.BreakpointCreateByLocation("fmts_tester.mm", 68);
+ CONT;
+ }
+
+ STEP (1)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (2)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (3)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (4)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (5)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (6)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (7)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (8)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (9)
+ {
+ DoTest ();
+ CONT;
+ }
+ STEP (10)
+ {
+ DoTest ();
+ CONT;
+ }
+ KILL;
+ }
+
+ void
+ 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);
+
+ CFURLRef file = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)m_out_path.c_str(), m_out_path.size(), FALSE);
+
+ CFURLWriteDataAndPropertiesToResource(file,xmlData,NULL,NULL);
+ }
+
+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(SBValue)>> 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;
+}
+
diff --git a/lldb/tools/lldb-perf/darwin/sketch/foobar.sketch2 b/lldb/tools/lldb-perf/darwin/sketch/foobar.sketch2
new file mode 100644
index 00000000000..553c698b180
--- /dev/null
+++ b/lldb/tools/lldb-perf/darwin/sketch/foobar.sketch2
Binary files differ
diff --git a/lldb/tools/lldb-perf/darwin/sketch/main.cpp b/lldb/tools/lldb-perf/darwin/sketch/main.cpp
index de12140508c..132903b49e3 100644
--- a/lldb/tools/lldb-perf/darwin/sketch/main.cpp
+++ b/lldb/tools/lldb-perf/darwin/sketch/main.cpp
@@ -26,13 +26,13 @@ public:
SketchTest () :
m_fetch_frames_measurement ([this] (SBProcess process) -> void {
Xcode::FetchFrames (process,false,false);
- }, "fetch-frames"),
+ }, "fetch-frames", "time to dump backtrace for every frame in every thread"),
m_file_line_bp_measurement([] (SBTarget target,const char* file, uint32_t line) -> void {
Xcode::CreateFileLineBreakpoint(target, file, line);
- }, "file-line-bkpt"),
+ }, "file-line-bkpt", "time to set a breakpoint given a file and line"),
m_fetch_modules_measurement ([] (SBTarget target) -> void {
Xcode::FetchModules(target);
- }, "fetch-modules"),
+ }, "fetch-modules", "time to get info for all modules in the process"),
m_fetch_vars_measurement([this] (SBProcess process, int depth) -> void {
auto threads_count = process.GetNumThreads();
for (size_t thread_num = 0; thread_num < threads_count; thread_num++)
@@ -42,11 +42,11 @@ public:
Xcode::FetchVariables(frame,depth,GetVerbose());
}
- }, "fetch-vars"),
+ }, "fetch-vars", "time to dump variables for the topmost frame in every thread"),
m_run_expr_measurement([this] (SBFrame frame, const char* expr) -> void {
SBValue value(frame.EvaluateExpression(expr, lldb::eDynamicCanRunTarget));
Xcode::FetchVariable(value,0,GetVerbose());
- }, "run-expr")
+ }, "run-expr", "time to evaluate an expression and display the result")
{}
virtual
@@ -57,8 +57,8 @@ public:
virtual void
Setup (int argc, const char** argv)
{
- m_app_path.assign(argv[1]); // "~/perf/Small_ObjC/Sketch/build/Debug/Sketch.app"
- m_doc_path.assign(argv[2]); // "/Volumes/work/egranata/perf/Small_ObjC/TesterApp/foobar.sketch2";
+ m_app_path.assign(argv[1]);
+ m_doc_path.assign(argv[2]);
m_out_path.assign(argv[3]);
TestCase::Setup(argc,argv);
m_target = m_debugger.CreateTarget(m_app_path.c_str());
diff --git a/lldb/tools/lldb-perf/lib/Measurement.h b/lldb/tools/lldb-perf/lib/Measurement.h
index 0697b0fe30f..4623bdf8f6f 100644
--- a/lldb/tools/lldb-perf/lib/Measurement.h
+++ b/lldb/tools/lldb-perf/lib/Measurement.h
@@ -10,6 +10,7 @@
#define __PerfTestDriver__Measurement__
#include "Gauge.h"
+#include "Timer.h"
#include "Metric.h"
namespace lldb { namespace perf
@@ -18,10 +19,19 @@ template <typename GaugeType, typename Action>
class Measurement : public WriteToPList
{
public:
- Measurement (Action act, const char* name = NULL) :
+ Measurement () {}
+
+ Measurement (Action act, const char* name = NULL, const char* descr = NULL) :
m_action (act),
- m_metric (Metric<typename GaugeType::SizeType>(name))
+ m_metric (Metric<typename GaugeType::SizeType>(name,descr))
{}
+
+ template <typename GaugeType_Rhs, typename Action_Rhs>
+ Measurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) :
+ m_action(rhs.action()),
+ m_metric(rhs.metric())
+ {
+ }
template <typename... Args>
void
@@ -31,22 +41,55 @@ public:
m_metric.append (gauge.gauge(m_action,args...));
}
- Metric<typename GaugeType::SizeType>
- metric ()
+ virtual const Metric<typename GaugeType::SizeType>&
+ metric () const
{
return m_metric;
}
+ virtual const Action&
+ action () const
+ {
+ return m_action;
+ }
+
virtual void
Write (CFCMutableArray& parent)
{
m_metric.Write(parent);
}
-private:
+protected:
Action m_action;
Metric<typename GaugeType::SizeType> m_metric;
};
+
+template <typename Action>
+class TimeMeasurement : public Measurement<TimeGauge,Action>
+{
+public:
+ TimeMeasurement () : Measurement<TimeGauge,Action> ()
+ {}
+
+ TimeMeasurement (Action act, const char* name = NULL, const char* descr = NULL) : Measurement<TimeGauge,Action> (act, name, descr)
+ {}
+
+ template <typename Action_Rhs>
+ TimeMeasurement (const TimeMeasurement<Action_Rhs>& rhs) : Measurement<TimeGauge,Action>(rhs)
+ {}
+
+ template <typename GaugeType_Rhs, typename Action_Rhs>
+ TimeMeasurement (const Measurement<GaugeType_Rhs, Action_Rhs>& rhs) : Measurement<GaugeType_Rhs,Action_Rhs>(rhs)
+ {}
+
+ template <typename... Args>
+ void
+ operator () (Args... args)
+ {
+ Measurement<TimeGauge,Action>::operator()(args...);
+ }
+};
+
} }
#endif /* defined(__PerfTestDriver__Measurement__) */
diff --git a/lldb/tools/lldb-perf/lib/Metric.cpp b/lldb/tools/lldb-perf/lib/Metric.cpp
index 885413fc65a..3791dd35409 100644
--- a/lldb/tools/lldb-perf/lib/Metric.cpp
+++ b/lldb/tools/lldb-perf/lib/Metric.cpp
@@ -19,8 +19,9 @@ Metric<T>::Metric () : Metric ("")
{}
template <class T>
-Metric<T>::Metric (const char* n) :
+Metric<T>::Metric (const char* n, const char* d) :
m_name(n ? n : ""),
+m_description(d ? d : ""),
m_dataset ()
{}
@@ -63,10 +64,18 @@ Metric<T>::name ()
}
template <class T>
+const char*
+Metric<T>::description ()
+{
+ return m_description.c_str();
+}
+
+template <class T>
void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<double>)
{
CFCMutableDictionary dict;
- dict.AddValueCString(CFCString("name").get(),m_name.c_str(), true);
+ dict.AddValueCString(CFCString("name").get(),name(), true);
+ dict.AddValueCString(CFCString("description").get(),description(), true);
dict.AddValueDouble(CFCString("value").get(),this->average(), true);
parent.AppendValue(dict.get(), true);
}
@@ -75,7 +84,8 @@ template <class T>
void Metric<T>::WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>)
{
CFCMutableDictionary dict;
- dict.AddValueCString(CFCString("name").get(),m_name.c_str(), true);
+ dict.AddValueCString(CFCString("name").get(),name(), true);
+ dict.AddValueCString(CFCString("description").get(),description(), true);
dict.AddValueUInt64(CFCString("value").get(),this->average(), true);
parent.AppendValue(dict.get(), true);
}
diff --git a/lldb/tools/lldb-perf/lib/Metric.h b/lldb/tools/lldb-perf/lib/Metric.h
index 33ed6c27443..874169522ad 100644
--- a/lldb/tools/lldb-perf/lib/Metric.h
+++ b/lldb/tools/lldb-perf/lib/Metric.h
@@ -31,7 +31,7 @@ template <class ValueType>
class Metric : public WriteToPList {
public:
Metric ();
- Metric (const char*);
+ Metric (const char*, const char* = NULL);
void
append (ValueType v);
@@ -48,6 +48,9 @@ public:
const char*
name ();
+ const char*
+ description ();
+
virtual void
Write (CFCMutableArray& parent)
{
@@ -64,6 +67,7 @@ private:
void WriteImpl (CFCMutableArray& parent, identity<mach_vm_size_t>);
std::string m_name;
+ std::string m_description;
std::vector<ValueType> m_dataset;
};
} }
diff --git a/lldb/tools/lldb-perf/lib/TestCase.cpp b/lldb/tools/lldb-perf/lib/TestCase.cpp
index 2067969f81a..beb335f6613 100644
--- a/lldb/tools/lldb-perf/lib/TestCase.cpp
+++ b/lldb/tools/lldb-perf/lib/TestCase.cpp
@@ -18,17 +18,17 @@ m_process(),
m_thread(),
m_listener(),
m_verbose(false)
-{}
-
-void
-TestCase::Setup (int argc, const char** argv)
{
- SBDebugger::Initialize();
+ SBDebugger::Initialize();
SBHostOS::ThreadCreated ("<lldb-tester.app.main>");
m_debugger = SBDebugger::Create(false);
m_listener = m_debugger.GetListener();
}
+void
+TestCase::Setup (int argc, const char** argv)
+{}
+
bool
TestCase::Launch (const char** args, const char* cwd)
{
diff --git a/lldb/tools/lldb-perf/lib/TestCase.h b/lldb/tools/lldb-perf/lib/TestCase.h
index f2d67de6662..c4d449a330a 100644
--- a/lldb/tools/lldb-perf/lib/TestCase.h
+++ b/lldb/tools/lldb-perf/lib/TestCase.h
@@ -59,9 +59,15 @@ public:
Results () = 0;
template <typename G,typename A>
- Measurement<G,A> CreateMeasurement (A a, const char* name = NULL)
+ Measurement<G,A> CreateMeasurement (A a, const char* name = NULL, const char* description = NULL)
{
- return Measurement<G,A> (a,name);
+ return Measurement<G,A> (a,name, description);
+ }
+
+ template <typename A>
+ TimeMeasurement<A> CreateTimeMeasurement (A a, const char* name = NULL, const char* description = NULL)
+ {
+ return TimeMeasurement<A> (a,name, description);
}
static void
diff --git a/lldb/tools/lldb-perf/lib/Xcode.cpp b/lldb/tools/lldb-perf/lib/Xcode.cpp
index fd2d2c4406c..730844d520f 100644
--- a/lldb/tools/lldb-perf/lib/Xcode.cpp
+++ b/lldb/tools/lldb-perf/lib/Xcode.cpp
@@ -32,7 +32,7 @@ Xcode::FetchVariable (SBValue value, uint32_t expand, bool verbose)
auto count = value.GetNumChildren();
for (int i = 0; i < count; i++)
{
- SBValue child(value.GetChildAtIndex(i));
+ SBValue child(value.GetChildAtIndex(i,value.IsDynamic() ? lldb::eDynamicCanRunTarget : lldb::eNoDynamicValues, true));
FetchVariable (child,expand-1,verbose);
}
}
OpenPOWER on IntegriCloud