mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-07-23 18:06:18 +00:00
lib/drmtest: subtest infrastructure
To make these helpers as least invasive as possible simply initialize the options with a getopt parser and let the control flow be steered with a simple helper which gets the subtest name as an argument. The only tricky part for using it is that the subtest check helper doubles up as the conduit to enumerate tests (and in that mode prevents any test from being run). It is therefore important that nothing gets printed to stdout outside of these checks. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
021909e10d
commit
9fc7e1386a
@ -36,6 +36,7 @@
|
||||
#include <signal.h>
|
||||
#include <pciaccess.h>
|
||||
#include <math.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include "drmtest.h"
|
||||
#include "i915_drm.h"
|
||||
@ -513,6 +514,65 @@ void drmtest_stop_signal_helper(void)
|
||||
signal_helper = -1;
|
||||
}
|
||||
|
||||
/* subtests helpers */
|
||||
static bool list_subtests = false;
|
||||
static char *run_single_subtest = NULL;
|
||||
|
||||
void drmtest_subtest_init(int argc, char **argv)
|
||||
{
|
||||
int c, option_index = 0;
|
||||
static struct option long_options[] = {
|
||||
{"list-subtests", 0, 0, 'l'},
|
||||
{"run-subtest", 1, 0, 'r'},
|
||||
{NULL, 0, 0, 0,}
|
||||
};
|
||||
|
||||
/* supress getopt errors about unknown options */
|
||||
opterr = 0;
|
||||
while((c = getopt_long(argc, argv, "",
|
||||
long_options, &option_index)) != -1) {
|
||||
switch(c) {
|
||||
case 'l':
|
||||
list_subtests = true;
|
||||
goto out;
|
||||
case 'r':
|
||||
run_single_subtest = strdup(optarg);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
/* reset opt parsing */
|
||||
optind = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: Testcases which use these helpers MUST NOT output anything to stdout
|
||||
* outside of places protected by drmtest_run_subtest checks - the piglit
|
||||
* runner adds every line to the subtest list.
|
||||
*/
|
||||
bool drmtest_run_subtest(const char *subtest_name)
|
||||
{
|
||||
if (list_subtests) {
|
||||
printf("%s\n", subtest_name);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!run_single_subtest) {
|
||||
return true;
|
||||
} else {
|
||||
if (strcmp(subtest_name, run_single_subtest) == 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool drmtest_only_list_subtests(void)
|
||||
{
|
||||
return list_subtests;
|
||||
}
|
||||
|
||||
/* other helpers */
|
||||
void drmtest_exchange_int(void *array, unsigned i, unsigned j)
|
||||
{
|
||||
|
@ -84,6 +84,9 @@ void drmtest_permute_array(void *array, unsigned size,
|
||||
unsigned i,
|
||||
unsigned j));
|
||||
void drmtest_progress(const char *header, uint64_t i, uint64_t total);
|
||||
void drmtest_subtest_init(int argc, char **argv);
|
||||
bool drmtest_run_subtest(const char *subtest_name);
|
||||
bool drmtest_only_list_subtests(void);
|
||||
|
||||
/* helpers based upon the libdrm buffer manager */
|
||||
void drmtest_init_aperture_trashers(drm_intel_bufmgr *bufmgr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user