TestCase.h revision 91c570abdc2eb7f0d9bc5affb086d515838ebc39
183c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek//
2eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek//  TestCase.h
3eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek//  PerfTestDriver
4eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek//
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner//  Created by Enrico Granata on 3/7/13.
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner//  Copyright (c) 2013 Apple Inc. All rights reserved.
7eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek//
8eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek
9eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek#ifndef __PerfTestDriver__TestCase__
1083c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek#define __PerfTestDriver__TestCase__
1183c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek
12eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek#include "lldb/API/LLDB.h"
13eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek#include "Measurement.h"
14eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek
1583c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremeneknamespace lldb_perf
1683c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek{
17eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenekclass TestCase
18c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu{
19e41611aa2237d06a0ef61db4528fb2883a8defcdTed Kremenekpublic:
2003013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer    TestCase();
214c3fbe33194cd9b1bfff773647ed785b403e1ba5Ted Kremenek
22c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek    struct ActionWanted
235226755ab5ce6346f98b5f41cdcffbe84c5bb484Ted Kremenek	{
246bad354120ce0d35901e86ca63e5534b7b9ed092Ted Kremenek		enum class Type
25ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek		{
264c3fbe33194cd9b1bfff773647ed785b403e1ba5Ted Kremenek			eNext,
2759753441b6391a9843eff287f0adb2614153b7c8Ted Kremenek			eContinue,
28ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek            eStepOut,
29eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek			eKill
30eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek		} type;
3125e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu		lldb::SBThread thread;
321d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek
33102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor        ActionWanted () :
34ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek            type (Type::eContinue),
35ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek            thread ()
36ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek        {
3783c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek        }
38eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek
39cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek        void
40cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek        Continue()
41cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek        {
42cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek            type = Type::eContinue;
4351a31ca9a9903ecba1b25bc0989f62e1e2bebb4cAnna Zaks            thread = lldb::SBThread();
4451a31ca9a9903ecba1b25bc0989f62e1e2bebb4cAnna Zaks        }
45cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek
46b4b817d704287836b52b34369009e682f208aa2bTed Kremenek        void
47cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek        StepOver (lldb::SBThread t)
48b4b817d704287836b52b34369009e682f208aa2bTed Kremenek        {
49cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek            type = Type::eNext;
508083414ee7cc8f5c807ed6a4e120fb4e0ab50ff8Ted Kremenek            thread = t;
51cdd4f1783da7c7565be2376d14ca6ab2625aa4b6Ted Kremenek        }
529dc84c9455df2a77195147d0210c915dc1775a88Zhongxing Xu
53102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor        void
540b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks        StepOut (lldb::SBThread t)
550b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks        {
56f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek            type = Type::eStepOut;
570b3ade86a1c60cf0c7b56aa238aff458eb7f5974Anna Zaks            thread = t;
5828038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose        }
5928038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose
6028038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose        void
6128038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose        Kill ()
625903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks        {
634c3fbe33194cd9b1bfff773647ed785b403e1ba5Ted Kremenek            type = Type::eKill;
64d452758bb6b59340528a26def9ecc24b329d4ecfTed Kremenek            thread = lldb::SBThread();
6528038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose        }
66c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek	};
6725e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu
6825e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu    virtual
6925e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu    ~TestCase ()
70c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek    {}
71c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek
7228038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose	virtual bool
731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump	Setup (int argc, const char** argv);
74ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek
75ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek	virtual void
76d452758bb6b59340528a26def9ecc24b329d4ecfTed Kremenek	TestStep (int counter, ActionWanted &next_action) = 0;
77f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek
78f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek	bool
79f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek	Launch (lldb::SBLaunchInfo &launch_info);
80ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek
8128038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose	void
8228038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose	Loop();
8328038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose
8428038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose    void
85f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek    SetVerbose (bool);
86f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek
87f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek    bool
88f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek    GetVerbose ();
89f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek
90f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek    virtual void
91f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek    Results () = 0;
92f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek
93f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek    template <typename G,typename A>
94ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek    Measurement<G,A> CreateMeasurement (A a, const char* name = NULL, const char* description = NULL)
9528038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose    {
9628038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose        return Measurement<G,A> (a,name, description);
9728038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose    }
9828038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose
99f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek    template <typename A>
100d452758bb6b59340528a26def9ecc24b329d4ecfTed Kremenek    TimeMeasurement<A> CreateTimeMeasurement (A a, const char* name = NULL, const char* description = NULL)
10128038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose    {
102c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek        return TimeMeasurement<A> (a,name, description);
103c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek    }
1041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static void
106af42712cd8f548f15c700d49a7038ddb846aafa8Anna Zaks    Run (TestCase& test, int argc, const char** argv);
107af42712cd8f548f15c700d49a7038ddb846aafa8Anna Zaks
10863d3201619fdac284adfd3b9328562fa20a01c40Anna Zaksprotected:
109c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek    lldb::SBDebugger m_debugger;
110f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek	lldb::SBTarget m_target;
111af42712cd8f548f15c700d49a7038ddb846aafa8Anna Zaks	lldb::SBProcess m_process;
112af42712cd8f548f15c700d49a7038ddb846aafa8Anna Zaks	lldb::SBThread m_thread;
113f30c0a97d9addc72a4928b8bb2039b2b464e1f94Ted Kremenek	lldb::SBListener m_listener;
11428038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose    bool m_verbose;
115c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek};
11628038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose}
117c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek
11828038f33aa2db4833881fea757a1f0daf85ac02bJordan Rose#endif /* defined(__PerfTestDriver__TestCase__) */
119c8443e592dbab65cd06ddea9fad6c6f049a08942Ted Kremenek