diff options
Diffstat (limited to 'tools/lldb-perf/darwin/sketch/sketch.cpp')
-rw-r--r-- | tools/lldb-perf/darwin/sketch/sketch.cpp | 330 |
1 files changed, 0 insertions, 330 deletions
diff --git a/tools/lldb-perf/darwin/sketch/sketch.cpp b/tools/lldb-perf/darwin/sketch/sketch.cpp deleted file mode 100644 index ddcb4453db9e..000000000000 --- a/tools/lldb-perf/darwin/sketch/sketch.cpp +++ /dev/null @@ -1,330 +0,0 @@ -//===-- sketch.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/Measurement.h" -#include "lldb-perf/lib/Metric.h" -#include "lldb-perf/lib/TestCase.h" -#include "lldb-perf/lib/Timer.h" -#include "lldb-perf/lib/Xcode.h" - -#include <fstream> -#include <getopt.h> -#include <iostream> -#include <unistd.h> - -using namespace lldb_perf; - -static struct option g_long_options[] = { - {"verbose", no_argument, NULL, 'v'}, - {"sketch", required_argument, NULL, 'c'}, - {"foobar", required_argument, NULL, 'f'}, - {"out-file", required_argument, NULL, 'o'}, - {NULL, 0, NULL, 0}}; - -class SketchTest : public TestCase { -public: - SketchTest() - : m_fetch_frames_measurement( - [this]() -> void { - Xcode::FetchFrames(GetProcess(), false, false); - }, - "fetch-frames", - "time to dump backtrace for every frame in every thread"), - m_file_line_bp_measurement( - [this](const char *file, uint32_t line) -> void { - Xcode::CreateFileLineBreakpoint(GetTarget(), file, line); - }, - "file-line-bkpt", "time to set a breakpoint given a file and line"), - m_fetch_modules_measurement( - [this]() -> void { Xcode::FetchModules(GetTarget()); }, - "fetch-modules", "time to get info for all modules in the process"), - m_fetch_vars_measurement( - [this](int depth) -> void { - SBProcess process(GetProcess()); - auto threads_count = process.GetNumThreads(); - for (size_t thread_num = 0; thread_num < threads_count; - thread_num++) { - SBThread thread(process.GetThreadAtIndex(thread_num)); - SBFrame frame(thread.GetFrameAtIndex(0)); - Xcode::FetchVariables(frame, depth, GetVerbose()); - } - }, - "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", - "time to evaluate an expression and display the result") { - m_app_path.clear(); - m_out_path.clear(); - m_doc_path.clear(); - m_print_help = false; - } - - virtual ~SketchTest() {} - - virtual bool ParseOption(int short_option, const char *optarg) { - switch (short_option) { - case 0: - return false; - - case -1: - return false; - - case '?': - case 'h': - m_print_help = true; - break; - - case 'v': - SetVerbose(true); - break; - - case 'c': { - SBFileSpec file(optarg); - if (file.Exists()) - SetExecutablePath(optarg); - else - fprintf(stderr, "error: file specified in --sketch (-c) option doesn't " - "exist: '%s'\n", - optarg); - } break; - - case 'f': { - SBFileSpec file(optarg); - if (file.Exists()) - SetDocumentPath(optarg); - else - fprintf(stderr, "error: file specified in --foobar (-f) option doesn't " - "exist: '%s'\n", - optarg); - } break; - - case 'o': - SetResultFilePath(optarg); - break; - - default: - m_print_help = true; - fprintf(stderr, "error: unrecognized option %c\n", short_option); - break; - } - return true; - } - - virtual struct option *GetLongOptions() { return g_long_options; } - - virtual bool Setup(int &argc, const char **&argv) { - TestCase::Setup(argc, argv); - bool error = false; - - if (GetExecutablePath() == NULL) { - // --sketch is mandatory - error = true; - fprintf(stderr, "error: the '--sketch=PATH' option is mandatory\n"); - } - - if (GetDocumentPath() == NULL) { - // --foobar is mandatory - error = true; - fprintf(stderr, "error: the '--foobar=PATH' option is mandatory\n"); - } - - if (error || GetPrintHelp()) { - puts(R"( - NAME - lldb_perf_sketch -- a tool that measures LLDB peformance while debugging sketch. - - SYNOPSIS - lldb_perf_sketch --sketch=PATH --foobar=PATH [--out-file=PATH --verbose] - - DESCRIPTION - Runs a set of static timing and memory tasks against sketch and outputs results - to a plist file. - )"); - } - - if (error) { - exit(1); - } - lldb::SBLaunchInfo launch_info = GetLaunchInfo(); - m_target = m_debugger.CreateTarget(m_app_path.c_str()); - m_file_line_bp_measurement("SKTDocument.m", 245); - m_file_line_bp_measurement("SKTDocument.m", 283); - m_file_line_bp_measurement("SKTText.m", 326); - return Launch(launch_info); - } - - lldb::SBLaunchInfo GetLaunchInfo() { - const char *file_arg = m_doc_path.c_str(); - const char *persist_arg = "-ApplePersistenceIgnoreState"; - const char *persist_skip = "YES"; - const char *empty = nullptr; - const char *args[] = {file_arg, persist_arg, persist_skip, empty}; - return SBLaunchInfo(args); - } - - void DoTest() { - m_fetch_frames_measurement(); - m_fetch_modules_measurement(); - m_fetch_vars_measurement(1); - } - - virtual void TestStep(int counter, ActionWanted &next_action) { - static int launch = 1; - switch (counter % 10) { - case 0: { - DoTest(); - if (counter == 0) - m_file_line_bp_measurement("SKTDocument.m", 254); - next_action.Continue(); - } break; - - case 1: { - DoTest(); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "properties"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), - "[properties description]"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "typeName"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "data"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "[data description]"); - next_action.Continue(); - } break; - - case 2: { - DoTest(); - next_action.Continue(); - } break; - - case 3: { - DoTest(); - next_action.StepOver(m_thread); - } break; - - case 4: { - DoTest(); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "layoutManager"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "contents"); - next_action.StepOver(m_thread); - } break; - - case 5: { - DoTest(); - next_action.StepOver(m_thread); - } break; - - case 6: { - DoTest(); - next_action.StepOver(m_thread); - } break; - - case 7: { - DoTest(); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "@\"an NSString\""); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), - "[(id)@\"an NSString\" description]"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), "@[@1,@2,@3]"); - next_action.StepOut(m_thread); - } break; - - case 8: { - DoTest(); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), - "[graphics description]"); - m_run_expr_measurement(m_thread.GetFrameAtIndex(0), - "[selectionIndexes description]"); - m_run_expr_measurement( - m_thread.GetFrameAtIndex(0), - "(BOOL)NSIntersectsRect(rect, graphicDrawingBounds)"); - } - next_action.CallNext(); - break; - case 9: - if (++launch < 10) - next_action.Relaunch(GetLaunchInfo()); - else - next_action.Kill(); - break; - - default: { next_action.Kill(); } break; - } - } - - virtual void WriteResults(Results &results) { - m_fetch_frames_measurement.WriteAverageAndStandardDeviation(results); - m_file_line_bp_measurement.WriteAverageAndStandardDeviation(results); - m_fetch_modules_measurement.WriteAverageAndStandardDeviation(results); - m_fetch_vars_measurement.WriteAverageAndStandardDeviation(results); - m_run_expr_measurement.WriteAverageAndStandardDeviation(results); - results.Write(GetResultFilePath()); - } - - void SetExecutablePath(const char *str) { - if (str) - m_app_path.assign(str); - } - - const char *GetExecutablePath() { - if (m_app_path.empty()) - return NULL; - return m_app_path.c_str(); - } - - void SetDocumentPath(const char *str) { - if (str) - m_doc_path.assign(str); - } - - const char *GetDocumentPath() { - if (m_doc_path.empty()) - return NULL; - return m_doc_path.c_str(); - } - - void SetResultFilePath(const char *str) { - if (str) - m_out_path.assign(str); - } - - const char *GetResultFilePath() { - if (m_out_path.empty()) - return "/dev/stdout"; - return m_out_path.c_str(); - } - - bool GetPrintHelp() { return m_print_help; } - -private: - Measurement<lldb_perf::TimeGauge, std::function<void()>> - m_fetch_frames_measurement; - Measurement<lldb_perf::TimeGauge, std::function<void(const char *, uint32_t)>> - m_file_line_bp_measurement; - Measurement<lldb_perf::TimeGauge, std::function<void()>> - m_fetch_modules_measurement; - Measurement<lldb_perf::TimeGauge, std::function<void(int)>> - m_fetch_vars_measurement; - Measurement<lldb_perf::TimeGauge, std::function<void(SBFrame, const char *)>> - m_run_expr_measurement; - - std::string m_app_path; - std::string m_doc_path; - std::string m_out_path; - bool m_print_help; -}; - -int main(int argc, const char *argv[]) { - SketchTest test; - return TestCase::Run(test, argc, argv); -} |