lldb-perf-stepping.cpp revision 9de4dec874148d30cc1d4c498d38cd048a8164ca
1a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include <CoreFoundation/CoreFoundation.h>
2a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
3a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include "lldb-perf/lib/Timer.h"
4a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include "lldb-perf/lib/Metric.h"
5a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include "lldb-perf/lib/Measurement.h"
6a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include "lldb-perf/lib/TestCase.h"
7a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include "lldb-perf/lib/Xcode.h"
8a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
9a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include <unistd.h>
10a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham#include <string>
11a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
12a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Inghamusing namespace lldb_perf;
13a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
14a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Inghamclass StepTest : public TestCase
15a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham{
16a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Inghampublic:
17a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    StepTest() :
18a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        m_do_one_step_over_measurement (std::function<void(StepTest &, int)>(&StepTest::DoOneStep))
19a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    {
20a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    }
21a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
22a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    virtual
23a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    ~StepTest() {}
24a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
259de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual bool
26a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    Setup (int argc, const char **argv)
27a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    {
28a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        m_app_path.assign(argv[1]);
29a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        m_out_path.assign(argv[2]);
30a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        TestCase::Setup (argc, argv);
31a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
32a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        m_target = m_debugger.CreateTarget(m_app_path.c_str());
33a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        const char* file_arg = m_app_path.c_str();
34a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        const char* empty = nullptr;
35a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        const char* args[] = {file_arg, empty};
369de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        SBLaunchInfo launch_info (args);
37a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
389de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        return Launch (launch_info);
39a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    }
40a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
41a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    void
42a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    DoOneStep (int sequence)
43a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    {
449de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
459de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    }
469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
479de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
489de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    void
499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    WriteResults (Results &results)
509de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
519de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//        results.Write(m_out_path.c_str());
529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    }
539de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
549de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
559de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytonprivate:
569de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual void
579de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton	TestStep (int counter, ActionWanted &next_action)
589de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
59a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
60a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    }
61a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
62a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    TimeMeasurement<std::function<void(StepTest &, int)> > m_do_one_step_over_measurement;
63a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    std::string m_app_path;
64a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    std::string m_out_path;
65a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
66a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
67a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham};
68a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
69a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham// argv[1] == path to app
70a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham// argv[2] == path to result
71a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Inghamint main(int argc, const char * argv[])
72a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham{
73a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    if (argc != 3)
74a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    {
75a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        printf ("Wrong number of arguments, should be \"path to app\", \"path to result.\"\n");
76a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham        return -1;
77a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    }
78a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham
799de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    StepTest test;
809de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    TestCase::Run(test,argc,argv);
81a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham    return 0;
82a3df3b0c89ab584262098f8d877e8a72e3614a08Jim Ingham}
83