Home | History | Annotate | Download | only in qphelper
      1 #ifndef _QPTESTLOG_H
      2 #define _QPTESTLOG_H
      3 /*-------------------------------------------------------------------------
      4  * drawElements Quality Program Helper Library
      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  * \defgroup TestLog
     23  * \ingroup TestLog
     24  * \{
     25  * \file
     26  * \brief Test log library
     27  *
     28  * qpTestLog Conventions:
     29  *
     30  * Each function takes qpTestLog pointer. Operations are done on that log
     31  * instance.
     32  *
     33  * When function takes a 'name' parameter, that name is exepected to
     34  * be a unique identifier within the scope of one test case. Test case
     35  * begins with a call to qpTestLog_startCase and ends with a call to
     36  * qpTestLog_endCase or qpTestLog_terminateCase. The human readable
     37  * "name" for a piece of information is given with the parameter
     38  * called 'description'.
     39  *
     40  * All functions writing to the log return a boolean value. False
     41  * means that the current write operation failed and the current log
     42  * instance should be abandoned.
     43  *
     44  *//*--------------------------------------------------------------------*/
     45 
     46 #include "deDefs.h"
     47 
     48 typedef struct qpTestLog_s	qpTestLog;
     49 
     50 /* Test results supported by current report version */
     51 /* \note Keep in sync with TestCaseStatus in Candy project. */
     52 typedef enum qpTestResult_e
     53 {
     54 	QP_TEST_RESULT_PASS = 0,				/*!< Test case passed.																	*/
     55 	QP_TEST_RESULT_FAIL,					/*!< Implementation produced incorrect results											*/
     56 	QP_TEST_RESULT_QUALITY_WARNING,			/*!< Result is within specification, but is not of high quality							*/
     57 	QP_TEST_RESULT_COMPATIBILITY_WARNING,	/*!< Result is within specification, but likely to cause fragmentation in the market	*/
     58 	QP_TEST_RESULT_PENDING,					/*!< The test is still running. Not a valid end result									*/
     59 	QP_TEST_RESULT_NOT_SUPPORTED,			/*!< Implementation does not support functionality needed by this test case				*/
     60 	QP_TEST_RESULT_RESOURCE_ERROR,			/*!< Implementation fails to pass the test due to lack of resources						*/
     61 	QP_TEST_RESULT_INTERNAL_ERROR,			/*!< Error occurred within Tester Core													*/
     62 	QP_TEST_RESULT_CRASH,					/*!< Crash occurred in test execution.													*/
     63 	QP_TEST_RESULT_TIMEOUT,					/*!< Timeout occurred in test execution.												*/
     64 
     65 	QP_TEST_RESULT_LAST
     66 } qpTestResult;
     67 
     68 /* Test case types. */
     69 typedef enum qpTestCaseType_e
     70 {
     71 	QP_TEST_CASE_TYPE_SELF_VALIDATE = 0,	/*!< Self-validating test case			*/
     72 	QP_TEST_CASE_TYPE_PERFORMANCE,			/*!< Performace test case				*/
     73 	QP_TEST_CASE_TYPE_CAPABILITY,			/*!< Capability score case				*/
     74 	QP_TEST_CASE_TYPE_ACCURACY,				/*!< Accuracy test case					*/
     75 
     76 	QP_TEST_CASE_TYPE_LAST
     77 } qpTestCaseType;
     78 
     79 /*--------------------------------------------------------------------*//*!
     80  * \brief Tag key-value pairs to give cues on proper visualization in GUI
     81  *//*--------------------------------------------------------------------*/
     82 typedef enum qpKeyValueTag_e
     83 {
     84 	QP_KEY_TAG_NONE = 0,
     85 	QP_KEY_TAG_PERFORMANCE,
     86 	QP_KEY_TAG_QUALITY,
     87 	QP_KEY_TAG_PRECISION,
     88 	QP_KEY_TAG_TIME,
     89 
     90 	/* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
     91 
     92 	QP_KEY_TAG_LAST	/* Do not remove */
     93 } qpKeyValueTag;
     94 
     95 /*--------------------------------------------------------------------*//*!
     96  * \brief Sample value tag for giving hints for analysis
     97  *//*--------------------------------------------------------------------*/
     98 typedef enum qpSampleValueTag_e
     99 {
    100 	QP_SAMPLE_VALUE_TAG_PREDICTOR = 0,		/*!< Predictor for sample, such as number of operations.	*/
    101 	QP_SAMPLE_VALUE_TAG_RESPONSE,			/*!< Response, i.e. measured value, such as render time.	*/
    102 
    103 	/* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
    104 
    105 	QP_SAMPLE_VALUE_TAG_LAST	/* Do not remove */
    106 } qpSampleValueTag;
    107 
    108 /* Image compression type. */
    109 typedef enum qpImageCompressionMode_e
    110 {
    111 	QP_IMAGE_COMPRESSION_MODE_NONE	= 0,	/*!< Do not compress images.					*/
    112 	QP_IMAGE_COMPRESSION_MODE_PNG,			/*!< Compress images using lossless libpng.		*/
    113 	QP_IMAGE_COMPRESSION_MODE_BEST,			/*!< Choose the best image compression mode.	*/
    114 
    115 	QP_IMAGE_COMPRESSION_MODE_LAST
    116 } qpImageCompressionMode;
    117 
    118 /*--------------------------------------------------------------------*//*!
    119  * \brief Image formats.
    120  *
    121  * Pixels are handled as a byte stream, i.e., endianess does not
    122  * affect component ordering.
    123  *//*--------------------------------------------------------------------*/
    124 typedef enum qpImageFormat_e
    125 {
    126 	QP_IMAGE_FORMAT_RGB888 = 0,
    127 	QP_IMAGE_FORMAT_RGBA8888,
    128 
    129 	QP_IMAGE_FORMAT_LAST
    130 } qpImageFormat;
    131 
    132 /* Test log flags. */
    133 typedef enum qpTestLogFlag_e
    134 {
    135 	QP_TEST_LOG_EXCLUDE_IMAGES			= (1<<0),		/*!< Do not log images. This reduces log size considerably.			*/
    136 	QP_TEST_LOG_EXCLUDE_SHADER_SOURCES	= (1<<1),		/*!< Do not log shader sources. Helps to reduce log size further.	*/
    137 	QP_TEST_LOG_NO_FLUSH				= (1<<2)		/*!< Do not do a fflush after writing the log.						*/
    138 } qpTestLogFlag;
    139 
    140 /* Shader type. */
    141 typedef enum qpShaderType_e
    142 {
    143 	QP_SHADER_TYPE_VERTEX = 0,
    144 	QP_SHADER_TYPE_FRAGMENT,
    145 	QP_SHADER_TYPE_GEOMETRY,
    146 	QP_SHADER_TYPE_TESS_CONTROL,
    147 	QP_SHADER_TYPE_TESS_EVALUATION,
    148 	QP_SHADER_TYPE_COMPUTE,
    149 
    150 	QP_SHADER_TYPE_LAST
    151 } qpShaderType;
    152 
    153 DE_BEGIN_EXTERN_C
    154 
    155 /* \todo [2013-04-13 pyry] Clean up & document. Do we actually want this? */
    156 typedef struct qpEglConfigInfo_s
    157 {
    158 	int							bufferSize;
    159 	int							redSize;
    160 	int							greenSize;
    161 	int							blueSize;
    162 	int							luminanceSize;
    163 	int							alphaSize;
    164 	int							alphaMaskSize;
    165 	deBool						bindToTextureRGB;
    166 	deBool						bindToTextureRGBA;
    167 	const char*					colorBufferType;
    168 	const char*					configCaveat;
    169 	int							configID;
    170 	const char*					conformant;
    171 	int							depthSize;
    172 	int							level;
    173 	int							maxPBufferWidth;
    174 	int							maxPBufferHeight;
    175 	int							maxPBufferPixels;
    176 	int							maxSwapInterval;
    177 	int							minSwapInterval;
    178 	deBool						nativeRenderable;
    179 	const char*					renderableType;
    180 	int							sampleBuffers;
    181 	int							samples;
    182 	int							stencilSize;
    183 	const char*					surfaceTypes;
    184 	const char*					transparentType;
    185 	int							transparentRedValue;
    186 	int							transparentGreenValue;
    187 	int							transparentBlueValue;
    188 } qpEglConfigInfo;
    189 
    190 
    191 qpTestLog*		qpTestLog_createFileLog			(const char* fileName, deUint32 flags);
    192 void			qpTestLog_destroy				(qpTestLog* log);
    193 
    194 deBool			qpTestLog_startCase				(qpTestLog* log, const char* testCasePath, qpTestCaseType testCaseType);
    195 deBool			qpTestLog_endCase				(qpTestLog* log, qpTestResult result, const char* description);
    196 deBool			qpTestLog_terminateCase			(qpTestLog* log, qpTestResult result);
    197 
    198 deBool			qpTestLog_writeMessage			(qpTestLog* log, const char* format, ...) DE_PRINTF_FUNC_ATTR(2,3);
    199 deBool			qpTestLog_startSection			(qpTestLog* log, const char* name, const char* description);
    200 deBool			qpTestLog_endSection			(qpTestLog* log);
    201 deBool			qpTestLog_writeText				(qpTestLog* log, const char* name, const char* description, qpKeyValueTag tag, const char* value);
    202 deBool			qpTestLog_writeInteger			(qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, deInt64 value);
    203 deBool			qpTestLog_writeFloat			(qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, float value);
    204 
    205 deBool			qpTestLog_startImageSet			(qpTestLog* log, const char* name, const char* description);
    206 deBool			qpTestLog_endImageSet			(qpTestLog* log);
    207 deBool			qpTestLog_writeImage			(qpTestLog* log, const char* name, const char* description, qpImageCompressionMode compressionMode, qpImageFormat format, int width, int height, int stride, const void* data);
    208 
    209 deBool			qpTestLog_startEglConfigSet		(qpTestLog* log, const char* key, const char* description);
    210 deBool			qpTestLog_writeEglConfig		(qpTestLog* log, const qpEglConfigInfo* config);
    211 deBool			qpTestLog_endEglConfigSet		(qpTestLog* log);
    212 
    213 /* \todo [2013-08-26 pyry] Unify ShaderProgram & KernelSource & CompileInfo. */
    214 
    215 deBool			qpTestLog_startShaderProgram	(qpTestLog* log, deBool linkOk, const char* linkInfoLog);
    216 deBool			qpTestLog_endShaderProgram		(qpTestLog* log);
    217 deBool			qpTestLog_writeShader			(qpTestLog* log, qpShaderType type, const char* source, deBool compileOk, const char* infoLog);
    218 
    219 deBool			qpTestLog_writeKernelSource		(qpTestLog* log, const char* source);
    220 deBool			qpTestLog_writeSpirVAssemblySource	(qpTestLog* log, const char* source);
    221 deBool			qpTestLog_writeCompileInfo		(qpTestLog* log, const char* name, const char* description, deBool compileOk, const char* infoLog);
    222 
    223 deBool			qpTestLog_startSampleList		(qpTestLog* log, const char* name, const char* description);
    224 deBool			qpTestLog_startSampleInfo		(qpTestLog* log);
    225 deBool			qpTestLog_writeValueInfo		(qpTestLog* log, const char* name, const char* description, const char* unit, qpSampleValueTag tag);
    226 deBool			qpTestLog_endSampleInfo			(qpTestLog* log);
    227 deBool			qpTestLog_startSample			(qpTestLog* log);
    228 deBool			qpTestLog_writeValueFloat		(qpTestLog* log, double value);
    229 deBool			qpTestLog_writeValueInteger		(qpTestLog* log, deInt64 value);
    230 deBool			qpTestLog_endSample				(qpTestLog* log);
    231 deBool			qpTestLog_endSampleList			(qpTestLog* log);
    232 
    233 deUint32		qpTestLog_getLogFlags			(const qpTestLog* log);
    234 
    235 const char*		qpGetTestResultName				(qpTestResult result);
    236 
    237 DE_END_EXTERN_C
    238 
    239 /*! \} */
    240 
    241 #endif /* _QPTESTLOG_H */
    242