[Piglit] [PATCH 3/4] util: Add a -list-subtests option that will list all the subtests

Ian Romanick idr at freedesktop.org
Mon Oct 7 16:19:03 PDT 2013


On 10/07/2013 11:02 AM, Chad Versace wrote:
> On 10/04/2013 06:11 PM, Ian Romanick wrote:
>> From: Ian Romanick <ian.d.romanick at intel.com>
>>
>> This required some ugly hacking about to get the list of subtests to
>> process_args.  Suggestions?
> 
> Let's avoid these ugly hacks. Here's my suggestion, which covers patches
> 2 and 3.

My troll bait worked. :)

> Patch 2/4 moves `struct piglit_gl_test_config config` out of main() to
> file scope. Let's avoid making things global; that leads to a slippery
> slope. I fought hard to kill many of Piglit's globals, and I don't welcome
> the arrival of new ones. If at all possible, let's leave it in main()
> where it is.
> 
> To leave 'config' in main(), we need to restructure a few things. First,
> piglit_gl_test_config_init() should no longer parse args; instead, it
> should only
> memset 'config' to 0. That is, let's change its signature from
> 
>     void piglit_gl_test_config_init(int *argc, char *argv[], struct
> piglit_gl_test_config *config)
> 
> to
> 
>     void piglit_gl_test_config_init(struct piglit_gl_test_config *config)
> 
> Move the argparsing (that is, the call to process_args()) into
> piglit_gl_test_run(). That will ensure
> that args are parsed *after* the test author has set all config
> variables in the CONFIG block.
> 
> The CONFIG block in your patch 4/4 should now look like this:
> 
> PIGLIT_GL_TEST_CONFIG_BEGIN
> 
>     config.subtests = subtests;
>     config.supports_gl_compat_version = 10;
>     config.window_visual = PIGLIT_GL_VISUAL_RGB;
> 
> PIGLIT_GL_TEST_CONFIG_END

I like this.  This is the way I originally wanted to structure things,
but there were issues.

> The config is no longer defined with file-scope, so piglit_init() should
> execute subtests
> like this:
>     
>     result = piglit_run_subtests(PIGLIT_SKIP);
> 
> piglit_run_selected_subtests() should access `config->subtests` through
> the global
> "test context object", piglit-framework-gl.c:`struct piglit_gl_framework
> *gl_fw`,
> like this:
> 
>     enum piglit_result
>     piglit_run_selected_subtests(enum piglit_result previous_result)
>     {
>         enum piglit_result result = previous_result;
>         const struct piglit_gl_subtest *subtests gl_fw->config->subtests;
>         const char **selected_subtests = gl_fw->config->selected_subtests;
>        
>         ...
>     }

I have somewhat mixed feelings about this... I liked that the old
piglit_run_selected_subtests was both more primitive (flexible) and more
explicit.  This is the birth of this tool, and I'm not sure how the next
user will want to use it.  Hmm...

A third option is an accessor that lets the test get config or maybe
just the list of selected tests from the implicit test context object.

> At this point, it's no longer necessary for the subtests array to be
> global,
> so you could even do the below if you wanted, but that's really up to
> personal
> taste.
> 
> PIGLIT_GL_TEST_CONFIG_BEGIN
> 
>     config.supports_gl_compat_version = 10;
>     config.window_visual = PIGLIT_GL_VISUAL_RGB;
> 
>     config.subtests = {
>         {
>             "Cannot delete while active",
>             "delete-inactive-only",
>             delete_inactive_only
>         },
>         ...,
>     };
> 
> PIGLIT_GL_TEST_CONFIG_END

I think that's C99 syntax, so we probably can't use it in piglit.



More information about the Piglit mailing list