diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /tools/lldb-perf/darwin/formatters/formatters.cpp | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'tools/lldb-perf/darwin/formatters/formatters.cpp')
| -rw-r--r-- | tools/lldb-perf/darwin/formatters/formatters.cpp | 246 | 
1 files changed, 246 insertions, 0 deletions
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; +} +  | 
