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