Home | History | Annotate | Download | only in common
      1 #ifndef _TCUCOMMANDLINE_HPP
      2 #define _TCUCOMMANDLINE_HPP
      3 /*-------------------------------------------------------------------------
      4  * drawElements Quality Program Tester Core
      5  * ----------------------------------------
      6  *
      7  * Copyright 2014 The Android Open Source Project
      8  *
      9  * Licensed under the Apache License, Version 2.0 (the "License");
     10  * you may not use this file except in compliance with the License.
     11  * You may obtain a copy of the License at
     12  *
     13  *      http://www.apache.org/licenses/LICENSE-2.0
     14  *
     15  * Unless required by applicable law or agreed to in writing, software
     16  * distributed under the License is distributed on an "AS IS" BASIS,
     17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     18  * See the License for the specific language governing permissions and
     19  * limitations under the License.
     20  *
     21  *//*!
     22  * \file
     23  * \brief Command line parsing.
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "tcuDefs.hpp"
     27 #include "deCommandLine.hpp"
     28 #include "deUniquePtr.hpp"
     29 
     30 #include <string>
     31 #include <vector>
     32 #include <istream>
     33 
     34 namespace tcu
     35 {
     36 
     37 /*--------------------------------------------------------------------*//*!
     38  * \brief Run mode tells whether the test program should run the tests or
     39  *		  dump out metadata about the tests.
     40  *//*--------------------------------------------------------------------*/
     41 enum RunMode
     42 {
     43 	RUNMODE_EXECUTE = 0,			//! Test program executes the tests.
     44 	RUNMODE_DUMP_XML_CASELIST,		//! Test program dumps the list of contained test cases in XML format.
     45 	RUNMODE_DUMP_TEXT_CASELIST,		//! Test program dumps the list of contained test cases in plain-text format.
     46 	RUNMODE_DUMP_STDOUT_CASELIST,	//! Test program dumps the list of contained test cases in plain-text format into stdout.
     47 
     48 	RUNMODE_LAST
     49 };
     50 
     51 /*--------------------------------------------------------------------*//*!
     52  * \brief Should graphical tests show rendering results on screen.
     53  *//*--------------------------------------------------------------------*/
     54 enum WindowVisibility
     55 {
     56 	WINDOWVISIBILITY_WINDOWED = 0,
     57 	WINDOWVISIBILITY_FULLSCREEN,
     58 	WINDOWVISIBILITY_HIDDEN,
     59 
     60 	WINDOWVISIBILITY_LAST
     61 };
     62 
     63 /*--------------------------------------------------------------------*//*!
     64  * \brief The type of rendering surface the tests should be executed on.
     65  *//*--------------------------------------------------------------------*/
     66 enum SurfaceType
     67 {
     68 	SURFACETYPE_WINDOW = 0,			//!< Native window.
     69 	SURFACETYPE_OFFSCREEN_NATIVE,	//!< Native offscreen surface, such as pixmap.
     70 	SURFACETYPE_OFFSCREEN_GENERIC,	//!< Generic offscreen surface, such as pbuffer.
     71 	SURFACETYPE_FBO,				//!< Framebuffer object.
     72 
     73 	SURFACETYPE_LAST
     74 };
     75 
     76 /*--------------------------------------------------------------------*//*!
     77  * \brief Screen rotation, always to clockwise direction.
     78  *//*--------------------------------------------------------------------*/
     79 enum ScreenRotation
     80 {
     81 	SCREENROTATION_UNSPECIFIED,		//!< Use default / current orientation.
     82 	SCREENROTATION_0,				//!< Set rotation to 0 degrees from baseline.
     83 	SCREENROTATION_90,
     84 	SCREENROTATION_180,
     85 	SCREENROTATION_270,
     86 
     87 	SCREENROTATION_LAST
     88 };
     89 
     90 class CaseTreeNode;
     91 class CasePaths;
     92 class Archive;
     93 
     94 class CaseListFilter
     95 {
     96 public:
     97 									CaseListFilter				(const de::cmdline::CommandLine& cmdLine, const tcu::Archive& archive);
     98 									CaseListFilter				(void);
     99 									~CaseListFilter				(void);
    100 
    101 	//! Check if test group is in supplied test case list.
    102 	bool							checkTestGroupName			(const char* groupName) const;
    103 
    104 	//! Check if test case is in supplied test case list.
    105 	bool							checkTestCaseName			(const char* caseName) const;
    106 
    107 private:
    108 	CaseListFilter												(const CaseListFilter&);	// not allowed!
    109 	CaseListFilter&					operator=					(const CaseListFilter&);	// not allowed!
    110 
    111 	CaseTreeNode*					m_caseTree;
    112 	de::MovePtr<const CasePaths>	m_casePaths;
    113 };
    114 
    115 /*--------------------------------------------------------------------*//*!
    116  * \brief Test command line
    117  *
    118  * CommandLine handles argument parsing and provides convinience functions
    119  * for querying test parameters.
    120  *//*--------------------------------------------------------------------*/
    121 class CommandLine
    122 {
    123 public:
    124 									CommandLine					(void);
    125 									CommandLine					(int argc, const char* const* argv);
    126 	explicit						CommandLine					(const std::string& cmdLine);
    127 									~CommandLine				(void);
    128 
    129 	bool							parse						(int argc, const char* const* argv);
    130 	bool							parse						(const std::string& cmdLine);
    131 
    132 	//! Get log file name (--deqp-log-filename)
    133 	const char*						getLogFileName				(void) const;
    134 
    135 	//! Get logging flags
    136 	deUint32						getLogFlags					(void) const;
    137 
    138 	//! Get run mode (--deqp-runmode)
    139 	RunMode							getRunMode					(void) const;
    140 
    141 	//! Get caselist dump target file pattern (--deqp-caselist-export-file)
    142 	const char*						getCaseListExportFile		(void) const;
    143 
    144 	//! Get default window visibility (--deqp-visibility)
    145 	WindowVisibility				getVisibility				(void) const;
    146 
    147 	//! Get watchdog enable status (--deqp-watchdog)
    148 	bool							isWatchDogEnabled			(void) const;
    149 
    150 	//! Get crash handling enable status (--deqp-crashhandler)
    151 	bool							isCrashHandlingEnabled		(void) const;
    152 
    153 	//! Get base seed for randomization (--deqp-base-seed)
    154 	int								getBaseSeed					(void) const;
    155 
    156 	//! Get test iteration count (--deqp-test-iteration-count)
    157 	int								getTestIterationCount		(void) const;
    158 
    159 	//! Get rendering target width (--deqp-surface-width)
    160 	int								getSurfaceWidth				(void) const;
    161 
    162 	//! Get rendering target height (--deqp-surface-height)
    163 	int								getSurfaceHeight			(void) const;
    164 
    165 	//! Get rendering taget type (--deqp-surface-type)
    166 	SurfaceType						getSurfaceType				(void) const;
    167 
    168 	//! Get screen rotation (--deqp-screen-rotation)
    169 	ScreenRotation					getScreenRotation			(void) const;
    170 
    171 	//! Get GL context factory name (--deqp-gl-context-type)
    172 	const char*						getGLContextType			(void) const;
    173 
    174 	//! Get GL config ID (--deqp-gl-config-id)
    175 	int								getGLConfigId				(void) const;
    176 
    177 	//! Get GL config name (--deqp-gl-config-name)
    178 	const char*						getGLConfigName				(void) const;
    179 
    180 	//! Get GL context flags (--deqp-gl-context-flags)
    181 	const char*						getGLContextFlags			(void) const;
    182 
    183 	//! Get OpenCL platform ID (--deqp-cl-platform-id)
    184 	int								getCLPlatformId				(void) const;
    185 
    186 	//! Get OpenCL device IDs (--deqp-cl-device-ids)
    187 	void							getCLDeviceIds				(std::vector<int>& deviceIds) const	{ deviceIds = getCLDeviceIds(); }
    188 	const std::vector<int>&			getCLDeviceIds				(void) const;
    189 
    190 	//! Get extra OpenCL program build options (--deqp-cl-build-options)
    191 	const char*						getCLBuildOptions			(void) const;
    192 
    193 	//! Get EGL native display factory (--deqp-egl-display-type)
    194 	const char*						getEGLDisplayType			(void) const;
    195 
    196 	//! Get EGL native window factory (--deqp-egl-window-type)
    197 	const char*						getEGLWindowType			(void) const;
    198 
    199 	//! Get EGL native pixmap factory (--deqp-egl-pixmap-type)
    200 	const char*						getEGLPixmapType			(void) const;
    201 
    202 	//! Get Vulkan device ID (--deqp-vk-device-id)
    203 	int								getVKDeviceId				(void) const;
    204 
    205 	//! Get Vulkan device group ID (--deqp-vk-device-group-id)
    206 	int								getVKDeviceGroupId			(void) const;
    207 
    208 	//! Enable development-time test case validation checks
    209 	bool							isValidationEnabled			(void) const;
    210 
    211 	//! Should we run tests that exhaust memory (--deqp-test-oom)
    212 	bool							isOutOfMemoryTestEnabled	(void) const;
    213 
    214 	/*--------------------------------------------------------------------*//*!
    215 	 * \brief Creates case list filter
    216 	 * \param archive Resources
    217 	 *
    218 	 * Creates case list filter based on one of the following parameters:
    219 	 *
    220 	 * --deqp-case
    221 	 * --deqp-caselist
    222 	 * --deqp-caselist-file
    223 	 * --deqp-caselist-resource
    224 	 * --deqp-stdin-caselist
    225 	 *
    226 	 * Throws std::invalid_argument if parsing fails.
    227 	 *//*--------------------------------------------------------------------*/
    228 	de::MovePtr<CaseListFilter>		createCaseListFilter		(const tcu::Archive& archive) const;
    229 
    230 protected:
    231 	const de::cmdline::CommandLine&	getCommandLine				(void) const;
    232 
    233 private:
    234 									CommandLine					(const CommandLine&);	// not allowed!
    235 	CommandLine&					operator=					(const CommandLine&);	// not allowed!
    236 
    237 	void							clear						(void);
    238 
    239 	virtual void					registerExtendedOptions		(de::cmdline::Parser& parser);
    240 
    241 	de::cmdline::CommandLine		m_cmdLine;
    242 	deUint32						m_logFlags;
    243 };
    244 
    245 } // tcu
    246 
    247 #endif // _TCUCOMMANDLINE_HPP
    248