[Piglit] [PATCH] glx: Rerun failing tests in auto mode if there is a pending expose event

Thomas Hellstrom thellstrom at vmware.com
Tue Sep 26 16:55:56 UTC 2017


On 09/26/2017 08:47 AM, Brian Paul wrote:
> On 09/26/2017 10:32 AM, Thomas Hellstrom wrote:
>> Tests that check frontbuffer contents after drawing may fail because
>> the X server touch the front contents between drawing and checking. 
>> In those
>> cases, there's typically a pending expose event. So check for that
>> situation and optionally rerun the test.
>
> Maybe a little word-smithing:
>
> "
> Tests that check the frontbuffer contents after drawing may fail because
> the X server may touch the front contents between drawing and reading.
> In those cases, there's typically a pending expose event. So check for 
> that situation and rerun the test.
> "
>

Sure.

>>
>> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
>> ---
>>   tests/util/piglit-glx-util.c | 14 ++++++++++++++
>>   1 file changed, 14 insertions(+)
>>
>> diff --git a/tests/util/piglit-glx-util.c b/tests/util/piglit-glx-util.c
>> index 95e33ae..85f7eef 100644
>> --- a/tests/util/piglit-glx-util.c
>> +++ b/tests/util/piglit-glx-util.c
>> @@ -212,6 +212,20 @@ piglit_glx_event_loop(Display *dpy, enum 
>> piglit_result (*draw)(Display *dpy))
>>               enum piglit_result result = draw(dpy);
>>
>>               if (piglit_automatic) {
>> +                /*
>> +                 * Rerun if we have failed and have a
>> +                 * pending expose event, which might be an
>> +                 * indication of invalid front buffer
>> +                 * contents.
>> +                 */
>> +                if (result == PIGLIT_FAIL &&
>> +                    XCheckTypedEvent(dpy, Expose, &event)) {
>> +                    fprintf(stderr,
>> +                        "Pending expose event- "
>> +                        "rerunning.\n");
>> +                    XPutBackEvent(dpy, &event);
>> +                    continue;
>> +                }
>>                   XCloseDisplay(dpy);
>>                   piglit_report_result(result);
>>                   break;
>>
>
> I think the problem you describe could also happen when we're not 
> running in automatic mode.  Therefore, I think the new code could be 
> put before the if (piglit_automatic) block.  What do you think?
>
It can, but in the non-automatic mode we don't exit the event loop and 
the expose event would be caught by the next iteration, already causing 
a redraw.
/Thomas


> -Brian
>




More information about the Piglit mailing list