summaryrefslogtreecommitdiff
path: root/tools/lldb-perf/lib/TestCase.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-perf/lib/TestCase.h')
-rw-r--r--tools/lldb-perf/lib/TestCase.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/tools/lldb-perf/lib/TestCase.h b/tools/lldb-perf/lib/TestCase.h
new file mode 100644
index 0000000000000..811d0432b58a1
--- /dev/null
+++ b/tools/lldb-perf/lib/TestCase.h
@@ -0,0 +1,205 @@
+//===-- TestCase.h ----------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __PerfTestDriver__TestCase__
+#define __PerfTestDriver__TestCase__
+
+#include "lldb/API/LLDB.h"
+#include "Measurement.h"
+#include <getopt.h>
+
+namespace lldb_perf {
+
+class Results;
+
+class TestCase
+{
+public:
+ TestCase();
+
+ struct ActionWanted
+ {
+ enum class Type
+ {
+ eStepOver,
+ eContinue,
+ eStepOut,
+ eRelaunch,
+ eCallNext,
+ eNone,
+ eKill
+ } type;
+ lldb::SBThread thread;
+ lldb::SBLaunchInfo launch_info;
+
+ ActionWanted () :
+ type (Type::eContinue),
+ thread (),
+ launch_info (NULL)
+ {
+ }
+
+ void
+ None ()
+ {
+ type = Type::eNone;
+ thread = lldb::SBThread();
+ }
+
+ void
+ Continue()
+ {
+ type = Type::eContinue;
+ thread = lldb::SBThread();
+ }
+
+ void
+ StepOver (lldb::SBThread t)
+ {
+ type = Type::eStepOver;
+ thread = t;
+ }
+
+ void
+ StepOut (lldb::SBThread t)
+ {
+ type = Type::eStepOut;
+ thread = t;
+ }
+
+ void
+ Relaunch (lldb::SBLaunchInfo l)
+ {
+ type = Type::eRelaunch;
+ thread = lldb::SBThread();
+ launch_info = l;
+ }
+
+ void
+ Kill ()
+ {
+ type = Type::eKill;
+ thread = lldb::SBThread();
+ }
+
+ void
+ CallNext ()
+ {
+ type = Type::eCallNext;
+ thread = lldb::SBThread();
+ }
+ };
+
+ virtual
+ ~TestCase ()
+ {
+ }
+
+ virtual bool
+ Setup (int& argc, const char**& argv);
+
+ virtual void
+ TestStep (int counter, ActionWanted &next_action) = 0;
+
+ bool
+ Launch (lldb::SBLaunchInfo &launch_info);
+
+ bool
+ Launch (std::initializer_list<const char*> args = {});
+
+ void
+ Loop();
+
+ void
+ SetVerbose (bool);
+
+ bool
+ GetVerbose ();
+
+ virtual void
+ WriteResults (Results &results) = 0;
+
+ template <typename G,typename A>
+ Measurement<G,A> CreateMeasurement (A a, const char* name = NULL, const char* description = NULL)
+ {
+ 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);
+ }
+
+ template <typename A>
+ MemoryMeasurement<A> CreateMemoryMeasurement (A a, const char* name = NULL, const char* description = NULL)
+ {
+ return MemoryMeasurement<A> (a,name, description);
+ }
+
+ static int
+ Run (TestCase& test, int argc, const char** argv);
+
+ virtual bool
+ ParseOption (int short_option, const char* optarg)
+ {
+ return false;
+ }
+
+ virtual struct option*
+ GetLongOptions ()
+ {
+ return NULL;
+ }
+
+ lldb::SBDebugger &
+ GetDebugger()
+ {
+ return m_debugger;
+ }
+
+ lldb::SBTarget &
+ GetTarget()
+ {
+ return m_target;
+ }
+
+ lldb::SBProcess &
+ GetProcess ()
+ {
+ return m_process;
+ }
+
+ lldb::SBThread &
+ GetThread ()
+ {
+ return m_thread;
+ }
+
+ int
+ GetStep ()
+ {
+ return m_step;
+ }
+
+ static const int RUN_SUCCESS = 0;
+ static const int RUN_SETUP_ERROR = 100;
+
+protected:
+ lldb::SBDebugger m_debugger;
+ lldb::SBTarget m_target;
+ lldb::SBProcess m_process;
+ lldb::SBThread m_thread;
+ lldb::SBListener m_listener;
+ bool m_verbose;
+ int m_step;
+};
+}
+
+#endif /* defined(__PerfTestDriver__TestCase__) */