Home | History | Annotate | Download | only in executor
      1 #ifndef _XETESTCASERESULT_HPP
      2 #define _XETESTCASERESULT_HPP
      3 /*-------------------------------------------------------------------------
      4  * drawElements Quality Program Test Executor
      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 Test case result models.
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "xeDefs.hpp"
     27 #include "xeTestCase.hpp"
     28 
     29 #include <string>
     30 #include <vector>
     31 #include <ostream>
     32 
     33 namespace xe
     34 {
     35 
     36 enum TestStatusCode
     37 {
     38 	TESTSTATUSCODE_PASS,					//!< Test case passed.
     39 	TESTSTATUSCODE_FAIL,					//!< Test case failed (not passed).
     40 	TESTSTATUSCODE_QUALITY_WARNING,			//!< Result within specification, but suspicious quality wise
     41 	TESTSTATUSCODE_COMPATIBILITY_WARNING,	//!< Result within specification, but likely to cause fragmentation
     42 	TESTSTATUSCODE_PENDING,					//!< Not yet started.
     43 	TESTSTATUSCODE_RUNNING,					//!< Currently running (not stored in database).
     44 	TESTSTATUSCODE_NOT_SUPPORTED,			//!< Some feature was not supported in the implementation.
     45 	TESTSTATUSCODE_RESOURCE_ERROR,			//!< A resource error has occurred.
     46 	TESTSTATUSCODE_INTERNAL_ERROR,			//!< An internal error has occurred.
     47 	TESTSTATUSCODE_CANCELED,				//!< User canceled the execution
     48 	TESTSTATUSCODE_TIMEOUT,					//!< Test was killed because of watch dog timeout.
     49 	TESTSTATUSCODE_CRASH,					//!< Test executable crashed before finishing the test.
     50 	TESTSTATUSCODE_DISABLED,				//!< Test case disabled (for current target)
     51 	TESTSTATUSCODE_TERMINATED,				//!< Terminated for other reason.
     52 
     53 	TESTSTATUSCODE_LAST
     54 };
     55 
     56 const char* getTestStatusCodeName (TestStatusCode statusCode);
     57 
     58 namespace ri
     59 {
     60 
     61 class Item;
     62 class Result;
     63 class Text;
     64 class Number;
     65 class Image;
     66 class ImageSet;
     67 class VertexShader;
     68 class FragmentShader;
     69 class ShaderProgram;
     70 class ShaderSource;
     71 class InfoLog;
     72 class EglConfig;
     73 class EglConfigSet;
     74 class Section;
     75 class KernelSource;
     76 class CompileInfo;
     77 class SampleList;
     78 class SampleInfo;
     79 class ValueInfo;
     80 class Sample;
     81 class SampleValue;
     82 
     83 // \todo [2014-02-28 pyry] Make List<T> for items that have only specific subitems.
     84 
     85 class List
     86 {
     87 public:
     88 							List			(void);
     89 							~List			(void);
     90 
     91 	int						getNumItems		(void) const	{ return (int)m_items.size();	}
     92 	const Item&				getItem			(int ndx) const	{ return *m_items[ndx];			}
     93 	Item&					getItem			(int ndx)		{ return *m_items[ndx];			}
     94 
     95 	template <typename T>
     96 	T*						allocItem		(void);
     97 
     98 private:
     99 	std::vector<Item*>		m_items;
    100 };
    101 
    102 template <typename T>
    103 T* List::allocItem (void)
    104 {
    105 	m_items.reserve(m_items.size()+1);
    106 	T* item = new T();
    107 	m_items.push_back(static_cast<ri::Item*>(item));
    108 	return item;
    109 }
    110 
    111 } // ri
    112 
    113 class TestCaseResultHeader
    114 {
    115 public:
    116 						TestCaseResultHeader	(void) : caseType(TESTCASETYPE_LAST), statusCode(TESTSTATUSCODE_LAST) {}
    117 
    118 	std::string			casePath;				//!< Full test case path.
    119 	TestCaseType		caseType;				//!< Test case type.
    120 	TestStatusCode		statusCode;				//!< Test status code.
    121 	std::string			statusDetails;			//!< Status description.
    122 };
    123 
    124 class TestCaseResult : public TestCaseResultHeader
    125 {
    126 public:
    127 	ri::List			resultItems;			//!< Test log items.
    128 };
    129 
    130 // Result items.
    131 namespace ri
    132 {
    133 
    134 // Result item type.
    135 enum Type
    136 {
    137 	TYPE_RESULT = 0,
    138 	TYPE_TEXT,
    139 	TYPE_NUMBER,
    140 	TYPE_IMAGE,
    141 	TYPE_IMAGESET,
    142 	TYPE_SHADER,
    143 	TYPE_SHADERPROGRAM,
    144 	TYPE_SHADERSOURCE,
    145 	TYPE_SPIRVSOURCE,
    146 	TYPE_INFOLOG,
    147 	TYPE_EGLCONFIG,
    148 	TYPE_EGLCONFIGSET,
    149 	TYPE_SECTION,
    150 	TYPE_KERNELSOURCE,
    151 	TYPE_COMPILEINFO,
    152 	TYPE_SAMPLELIST,
    153 	TYPE_SAMPLEINFO,
    154 	TYPE_VALUEINFO,
    155 	TYPE_SAMPLE,
    156 	TYPE_SAMPLEVALUE,
    157 
    158 	TYPE_LAST
    159 };
    160 
    161 class NumericValue
    162 {
    163 public:
    164 	enum Type
    165 	{
    166 		TYPE_EMPTY = 0,
    167 		TYPE_INT64,
    168 		TYPE_FLOAT64,
    169 
    170 		TYPE_LAST
    171 	};
    172 
    173 					NumericValue	(void)			: m_type(TYPE_EMPTY)	{}
    174 					NumericValue	(deInt64 value)	: m_type(TYPE_INT64)	{ m_value.int64 = value;	}
    175 					NumericValue	(double value)	: m_type(TYPE_FLOAT64)	{ m_value.float64 = value;	}
    176 
    177 	Type			getType			(void) const	{ return m_type; }
    178 	deInt64			getInt64		(void) const	{ DE_ASSERT(getType() == TYPE_INT64);	return m_value.int64;	}
    179 	double			getFloat64		(void) const	{ DE_ASSERT(getType() == TYPE_FLOAT64);	return m_value.float64;	}
    180 
    181 private:
    182 	Type			m_type;
    183 	union
    184 	{
    185 		deInt64		int64;
    186 		double		float64;
    187 	} m_value;
    188 };
    189 
    190 std::ostream& operator<< (std::ostream& str, const NumericValue& value);
    191 
    192 class Item
    193 {
    194 public:
    195 
    196 	virtual			~Item				(void) {}
    197 
    198 	Type			getType				(void) const { return m_type; }
    199 
    200 protected:
    201 					Item				(Type type) : m_type(type) {}
    202 
    203 private:
    204 					Item				(const Item& other);
    205 	Item&			operator=			(const Item& other);
    206 
    207 	Type			m_type;
    208 };
    209 
    210 class Result : public Item
    211 {
    212 public:
    213 						Result			(void) : Item(TYPE_RESULT), statusCode(TESTSTATUSCODE_LAST) {}
    214 						~Result			(void) {}
    215 
    216 	TestStatusCode		statusCode;
    217 	std::string			details;
    218 };
    219 
    220 class Text : public Item
    221 {
    222 public:
    223 						Text			(void) : Item(TYPE_TEXT) {}
    224 						~Text			(void) {}
    225 
    226 	std::string			text;
    227 };
    228 
    229 class Number : public Item
    230 {
    231 public:
    232 						Number			(void) : Item(TYPE_NUMBER) {}
    233 						~Number			(void) {}
    234 
    235 	std::string			name;
    236 	std::string			description;
    237 	std::string			unit;
    238 	std::string			tag;
    239 	NumericValue		value;
    240 };
    241 
    242 class Image : public Item
    243 {
    244 public:
    245 	enum Format
    246 	{
    247 		FORMAT_RGB888,
    248 		FORMAT_RGBA8888,
    249 
    250 		FORMAT_LAST
    251 	};
    252 
    253 	enum Compression
    254 	{
    255 		COMPRESSION_NONE = 0,
    256 		COMPRESSION_PNG,
    257 
    258 		COMPRESSION_LAST
    259 	};
    260 
    261 							Image		(void) : Item(TYPE_IMAGE), width(0), height(0), format(FORMAT_LAST), compression(COMPRESSION_LAST) {}
    262 							~Image		(void) {}
    263 
    264 	std::string				name;
    265 	std::string				description;
    266 	int						width;
    267 	int						height;
    268 	Format					format;
    269 	Compression				compression;
    270 	std::vector<deUint8>	data;
    271 };
    272 
    273 class ImageSet : public Item
    274 {
    275 public:
    276 						ImageSet		(void) : Item(TYPE_IMAGESET) {}
    277 						~ImageSet		(void) {}
    278 
    279 	std::string			name;
    280 	std::string			description;
    281 	List				images;
    282 };
    283 
    284 class ShaderSource : public Item
    285 {
    286 public:
    287 						ShaderSource		(void) : Item(TYPE_SHADERSOURCE) {}
    288 						~ShaderSource		(void) {}
    289 
    290 	std::string			source;
    291 };
    292 
    293 class SpirVSource : public Item
    294 {
    295 public:
    296 						SpirVSource			(void) : Item(TYPE_SPIRVSOURCE) {}
    297 						~SpirVSource		(void) {}
    298 
    299 	std::string			source;
    300 };
    301 
    302 class InfoLog : public Item
    303 {
    304 public:
    305 						InfoLog				(void) : Item(TYPE_INFOLOG) {}
    306 						~InfoLog			(void) {}
    307 
    308 	std::string			log;
    309 };
    310 
    311 class Shader : public Item
    312 {
    313 public:
    314 	enum ShaderType
    315 	{
    316 		SHADERTYPE_VERTEX = 0,
    317 		SHADERTYPE_FRAGMENT,
    318 		SHADERTYPE_GEOMETRY,
    319 		SHADERTYPE_TESS_CONTROL,
    320 		SHADERTYPE_TESS_EVALUATION,
    321 		SHADERTYPE_COMPUTE,
    322 
    323 		SHADERTYPE_LAST
    324 	};
    325 
    326 						Shader				(void) : Item(TYPE_SHADER), shaderType(SHADERTYPE_LAST), compileStatus(false) {}
    327 						~Shader				(void) {}
    328 
    329 	ShaderType			shaderType;
    330 	bool				compileStatus;
    331 	ShaderSource		source;
    332 	InfoLog				infoLog;
    333 };
    334 
    335 class ShaderProgram : public Item
    336 {
    337 public:
    338 						ShaderProgram		(void) : Item(TYPE_SHADERPROGRAM), linkStatus(false) {}
    339 						~ShaderProgram		(void) {}
    340 
    341 	List				shaders;
    342 	bool				linkStatus;
    343 	InfoLog				linkInfoLog;
    344 };
    345 
    346 class EglConfig : public Item
    347 {
    348 public:
    349 						EglConfig			(void);
    350 						~EglConfig			(void) {}
    351 
    352 	int					bufferSize;
    353 	int					redSize;
    354 	int					greenSize;
    355 	int					blueSize;
    356 	int					luminanceSize;
    357 	int					alphaSize;
    358 	int					alphaMaskSize;
    359 	bool				bindToTextureRGB;
    360 	bool				bindToTextureRGBA;
    361 	std::string			colorBufferType;
    362 	std::string			configCaveat;
    363 	int					configID;
    364 	std::string			conformant;
    365 	int					depthSize;
    366 	int					level;
    367 	int					maxPBufferWidth;
    368 	int					maxPBufferHeight;
    369 	int					maxPBufferPixels;
    370 	int					maxSwapInterval;
    371 	int					minSwapInterval;
    372 	bool				nativeRenderable;
    373 	std::string			renderableType;
    374 	int					sampleBuffers;
    375 	int					samples;
    376 	int					stencilSize;
    377 	std::string			surfaceTypes;
    378 	std::string			transparentType;
    379 	int					transparentRedValue;
    380 	int					transparentGreenValue;
    381 	int					transparentBlueValue;
    382 };
    383 
    384 inline EglConfig::EglConfig (void)
    385 	: Item					(TYPE_EGLCONFIG)
    386 	, bufferSize			(0)
    387 	, redSize				(0)
    388 	, greenSize				(0)
    389 	, blueSize				(0)
    390 	, luminanceSize			(0)
    391 	, alphaSize				(0)
    392 	, alphaMaskSize			(0)
    393 	, bindToTextureRGB		(false)
    394 	, bindToTextureRGBA		(false)
    395 	, configID				(0)
    396 	, depthSize				(0)
    397 	, level					(0)
    398 	, maxPBufferWidth		(0)
    399 	, maxPBufferHeight		(0)
    400 	, maxPBufferPixels		(0)
    401 	, maxSwapInterval		(0)
    402 	, minSwapInterval		(0)
    403 	, nativeRenderable		(false)
    404 	, sampleBuffers			(0)
    405 	, samples				(0)
    406 	, stencilSize			(0)
    407 	, transparentRedValue	(0)
    408 	, transparentGreenValue	(0)
    409 	, transparentBlueValue	(0)
    410 {
    411 }
    412 
    413 class EglConfigSet : public Item
    414 {
    415 public:
    416 						EglConfigSet		(void) : Item(TYPE_EGLCONFIGSET) {}
    417 						~EglConfigSet		(void) {}
    418 
    419 	std::string			name;
    420 	std::string			description;
    421 	List				configs;
    422 };
    423 
    424 class Section : public Item
    425 {
    426 public:
    427 						Section			(void) : Item(TYPE_SECTION) {}
    428 						~Section		(void) {}
    429 
    430 	std::string			name;
    431 	std::string			description;
    432 	List				items;
    433 };
    434 
    435 class KernelSource : public Item
    436 {
    437 public:
    438 						KernelSource	(void) : Item(TYPE_KERNELSOURCE) {}
    439 						~KernelSource	(void) {}
    440 
    441 	std::string			source;
    442 };
    443 
    444 class CompileInfo : public Item
    445 {
    446 public:
    447 						CompileInfo		(void) : Item(TYPE_COMPILEINFO), compileStatus(false) {}
    448 						~CompileInfo	(void) {}
    449 
    450 	std::string			name;
    451 	std::string			description;
    452 	bool				compileStatus;
    453 	InfoLog				infoLog;
    454 };
    455 
    456 class ValueInfo : public Item
    457 {
    458 public:
    459 	enum ValueTag
    460 	{
    461 		VALUETAG_PREDICTOR,
    462 		VALUETAG_RESPONSE,
    463 
    464 		VALUETAG_LAST
    465 	};
    466 
    467 						ValueInfo		(void) : Item(TYPE_VALUEINFO), tag(VALUETAG_LAST) {}
    468 						~ValueInfo		(void) {}
    469 
    470 	std::string			name;
    471 	std::string			description;
    472 	std::string			unit;
    473 	ValueTag			tag;
    474 };
    475 
    476 class SampleInfo : public Item
    477 {
    478 public:
    479 						SampleInfo		(void) : Item(TYPE_SAMPLEINFO) {}
    480 						~SampleInfo		(void) {}
    481 
    482 	List				valueInfos;
    483 };
    484 
    485 class SampleValue : public Item
    486 {
    487 public:
    488 						SampleValue		(void) : Item(TYPE_SAMPLEVALUE) {}
    489 						~SampleValue	(void) {}
    490 
    491 	NumericValue		value;
    492 };
    493 
    494 class Sample : public Item
    495 {
    496 public:
    497 						Sample			(void) : Item(TYPE_SAMPLE) {}
    498 						~Sample			(void) {}
    499 
    500 	List				values;
    501 };
    502 
    503 class SampleList : public Item
    504 {
    505 public:
    506 						SampleList		(void) : Item(TYPE_SAMPLELIST) {}
    507 						~SampleList		(void) {}
    508 
    509 	std::string			name;
    510 	std::string			description;
    511 	SampleInfo			sampleInfo;
    512 	List				samples;
    513 };
    514 
    515 } // ri
    516 } // xe
    517 
    518 #endif // _XETESTCASERESULT_HPP
    519