[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