[PATCH weston v2] tests: fix the cursor race in internal-screenshot

Derek Foreman derekf at osg.samsung.com
Thu Jun 23 14:45:56 UTC 2016


On 23/06/16 07:17 AM, Pekka Paalanen wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> This fix also depends on "compositor-headless: do not create a seat".
> 
> If we lose the race against weston-desktop-shell setting cursors, which
> is very rare, we get a cursor image in the screenshot, causing the test
> to fail. This is now fixed by moving the (remaining) cursor out of the
> way.
> 
> Arguably we should have better solutions for this, but that is another
> story. This is a stop-gap measure we can copy also in new
> screenshooting tests.
> 
> v2: Remove the example code for how to trigger the race, and rewrite the
> big comment.
> 
> Cc: Derek Foreman <derekf at osg.samsung.com>
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

I find this exceptionally clear, thanks!

Reviewed-by: Derek Foreman <derekf at osg.samsung.com>

> ---
>  tests/internal-screenshot-test.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/tests/internal-screenshot-test.c b/tests/internal-screenshot-test.c
> index 563aa3d..0b2cb1e 100644
> --- a/tests/internal-screenshot-test.c
> +++ b/tests/internal-screenshot-test.c
> @@ -68,6 +68,24 @@ TEST(internal_screenshot)
>  	assert(client);
>  	surface = client->surface->wl_surface;
>  
> +	/*
> +	 * We are racing our screenshooting against weston-desktop-shell
> +	 * setting the cursor. If w-d-s wins, our screenshot will have a cursor
> +	 * shown, which makes the image comparison fail. Our window and the
> +	 * default pointer position are accidentally causing an overlap that
> +	 * intersects our test clip rectangle.
> +	 *
> +	 * w-d-s wins very rarely though, so the race is easy to miss. You can
> +	 * make it happen by putting a delay before the call to
> +	 * create_client_and_test_surface().
> +	 *
> +	 * The weston_test_move_pointer() below makes the race irrelevant, as
> +	 * the cursor won't overlap with anything we care about.
> +	 */
> +
> +	/* Move the pointer away from the screenshot area. */
> +	weston_test_move_pointer(client->test->weston_test, 0, 0);
> +
>  	buf = create_shm_buffer(client, 100, 100, &pixels);
>  	draw_stuff(pixels, 100, 100);
>  	wl_surface_attach(surface, buf, 0, 0);
> 



More information about the wayland-devel mailing list