blob: 2cfdec9c0eb98b9d26a7389d99adf5a28688b245 [file] [log] [blame]
Enrico Granataf58cece2013-03-08 20:29:13 +00001//
2// TestCase.h
3// PerfTestDriver
4//
5// Created by Enrico Granata on 3/7/13.
6// Copyright (c) 2013 Apple Inc. All rights reserved.
7//
8
9#ifndef __PerfTestDriver__TestCase__
10#define __PerfTestDriver__TestCase__
11
12#include "lldb/API/LLDB.h"
13#include "Measurement.h"
14
Greg Clayton7b8f7382013-03-18 22:34:00 +000015namespace lldb_perf
Enrico Granataf58cece2013-03-08 20:29:13 +000016{
17class TestCase
18{
19public:
20 TestCase();
21
22 struct ActionWanted
23 {
24 enum class Type
25 {
Greg Clayton7b8f7382013-03-18 22:34:00 +000026 eNext,
27 eContinue,
Greg Claytone0b924e2013-03-19 04:41:22 +000028 eStepOut,
Greg Clayton7b8f7382013-03-18 22:34:00 +000029 eKill
Enrico Granataf58cece2013-03-08 20:29:13 +000030 } type;
Greg Clayton7b8f7382013-03-18 22:34:00 +000031 lldb::SBThread thread;
32
33 ActionWanted () :
34 type (Type::eContinue),
35 thread ()
36 {
37 }
38
39 void
40 Continue()
41 {
42 type = Type::eContinue;
43 thread = lldb::SBThread();
44 }
45
46 void
Greg Claytone0b924e2013-03-19 04:41:22 +000047 StepOver (lldb::SBThread t)
Greg Clayton7b8f7382013-03-18 22:34:00 +000048 {
49 type = Type::eNext;
50 thread = t;
51 }
52
53 void
Greg Claytone0b924e2013-03-19 04:41:22 +000054 StepOut (lldb::SBThread t)
Greg Clayton7b8f7382013-03-18 22:34:00 +000055 {
Greg Claytone0b924e2013-03-19 04:41:22 +000056 type = Type::eStepOut;
Greg Clayton7b8f7382013-03-18 22:34:00 +000057 thread = t;
58 }
59
60 void
61 Kill ()
62 {
63 type = Type::eKill;
64 thread = lldb::SBThread();
65 }
Enrico Granataf58cece2013-03-08 20:29:13 +000066 };
67
68 virtual
69 ~TestCase ()
70 {}
71
Greg Claytone0b924e2013-03-19 04:41:22 +000072 virtual bool
Enrico Granataf58cece2013-03-08 20:29:13 +000073 Setup (int argc, const char** argv);
74
Greg Clayton7b8f7382013-03-18 22:34:00 +000075 virtual void
76 TestStep (int counter, ActionWanted &next_action) = 0;
Enrico Granataf58cece2013-03-08 20:29:13 +000077
78 bool
Greg Claytone0b924e2013-03-19 04:41:22 +000079 Launch (lldb::SBLaunchInfo &launch_info);
Enrico Granataf58cece2013-03-08 20:29:13 +000080
81 void
82 Loop();
83
84 void
85 SetVerbose (bool);
86
87 bool
88 GetVerbose ();
89
90 virtual void
91 Results () = 0;
92
93 template <typename G,typename A>
Enrico Granata86910572013-03-14 19:00:42 +000094 Measurement<G,A> CreateMeasurement (A a, const char* name = NULL, const char* description = NULL)
Enrico Granataf58cece2013-03-08 20:29:13 +000095 {
Enrico Granata86910572013-03-14 19:00:42 +000096 return Measurement<G,A> (a,name, description);
97 }
98
99 template <typename A>
100 TimeMeasurement<A> CreateTimeMeasurement (A a, const char* name = NULL, const char* description = NULL)
101 {
102 return TimeMeasurement<A> (a,name, description);
Enrico Granataf58cece2013-03-08 20:29:13 +0000103 }
104
Enrico Granataf3fb83a2013-03-20 21:18:20 +0000105 template <typename A>
106 MemoryMeasurement<A> CreateMemoryMeasurement (A a, const char* name = NULL, const char* description = NULL)
107 {
108 return MemoryMeasurement<A> (a,name, description);
109 }
110
Enrico Granataf58cece2013-03-08 20:29:13 +0000111 static void
112 Run (TestCase& test, int argc, const char** argv);
113
Greg Clayton1080faf2013-03-19 19:30:33 +0000114 lldb::SBDebugger &
115 GetDebugger()
116 {
117 return m_debugger;
118 }
119
120 lldb::SBTarget &
121 GetTarget()
122 {
123 return m_target;
124 }
125
126 lldb::SBProcess &
127 GetProcess ()
128 {
129 return m_process;
130 }
131
132 lldb::SBThread &
133 GetThread ()
134 {
135 return m_thread;
136 }
Enrico Granatae16dfcd2013-03-20 22:42:34 +0000137
138 int
139 GetStep ()
140 {
141 return m_step;
142 }
143
Enrico Granataf58cece2013-03-08 20:29:13 +0000144protected:
Greg Clayton7b8f7382013-03-18 22:34:00 +0000145 lldb::SBDebugger m_debugger;
146 lldb::SBTarget m_target;
147 lldb::SBProcess m_process;
148 lldb::SBThread m_thread;
149 lldb::SBListener m_listener;
Enrico Granataf58cece2013-03-08 20:29:13 +0000150 bool m_verbose;
Enrico Granatae16dfcd2013-03-20 22:42:34 +0000151 int m_step;
Enrico Granataf58cece2013-03-08 20:29:13 +0000152};
Greg Clayton7b8f7382013-03-18 22:34:00 +0000153}
Enrico Granataf58cece2013-03-08 20:29:13 +0000154
155#endif /* defined(__PerfTestDriver__TestCase__) */