[PATCH weston 1/3] tests: add frame callback waiting helpers

Kristian Høgsberg hoegsberg at gmail.com
Fri Feb 8 10:38:42 PST 2013


On Fri, Feb 08, 2013 at 05:01:25PM +0200, Pekka Paalanen wrote:
> To avoid duplicating the code for setting and waiting for a frame
> callback, add helpers for it.
> 
> Convert move_client() to use the new helpers.

All three look good, committed.

Thanks,
Kristian

> Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
> ---
>  tests/weston-test-client-helper.c | 33 ++++++++++++++++++++++++---------
>  tests/weston-test-client-helper.h |  6 ++++++
>  2 files changed, 30 insertions(+), 9 deletions(-)
> 
> diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c
> index 1a1b4f1..8d846ff 100644
> --- a/tests/weston-test-client-helper.c
> +++ b/tests/weston-test-client-helper.c
> @@ -41,8 +41,7 @@ surface_contains(struct surface *surface, int x, int y)
>  }
>  
>  static void
> -move_client_frame_handler(void *data, 
> -			  struct wl_callback *callback, uint32_t time)
> +frame_callback_handler(void *data, struct wl_callback *callback, uint32_t time)
>  {
>  	int *done = data;
>  
> @@ -52,14 +51,33 @@ move_client_frame_handler(void *data,
>  }
>  
>  static const struct wl_callback_listener frame_listener = {
> -	move_client_frame_handler
> +	frame_callback_handler
>  };
>  
> +struct wl_callback *
> +frame_callback_set(struct wl_surface *surface, int *done)
> +{
> +	struct wl_callback *callback;
> +
> +	*done = 0;
> +	callback = wl_surface_frame(surface);
> +	wl_callback_add_listener(callback, &frame_listener, done);
> +
> +	return callback;
> +}
> +
> +void
> +frame_callback_wait(struct client *client, int *done)
> +{
> +	while (!*done) {
> +		assert(wl_display_dispatch(client->wl_display) >= 0);
> +	}
> +}
> +
>  void
>  move_client(struct client *client, int x, int y)
>  {
>  	struct surface *surface = client->surface;
> -	struct wl_callback *callback;
>  	int done;
>  
>  	client->surface->x = x;
> @@ -69,14 +87,11 @@ move_client(struct client *client, int x, int y)
>  	wl_surface_damage(surface->wl_surface, 0, 0, surface->width,
>  			  surface->height);
>  
> -	callback = wl_surface_frame(surface->wl_surface);
> -	done = 0;
> -	wl_callback_add_listener(callback, &frame_listener, &done);
> +	frame_callback_set(surface->wl_surface, &done);
>  
>  	wl_surface_commit(surface->wl_surface);
>  
> -	while (!done)
> -		wl_display_dispatch(client->wl_display);
> +	frame_callback_wait(client, &done);
>  }
>  
>  static void
> diff --git a/tests/weston-test-client-helper.h b/tests/weston-test-client-helper.h
> index 27042b2..c576dcd 100644
> --- a/tests/weston-test-client-helper.h
> +++ b/tests/weston-test-client-helper.h
> @@ -111,4 +111,10 @@ move_client(struct client *client, int x, int y);
>  	assert(wl_display_roundtrip((c)->wl_display) >= 0); \
>  } while (0)
>  
> +struct wl_callback *
> +frame_callback_set(struct wl_surface *surface, int *done);
> +
> +void
> +frame_callback_wait(struct client *client, int *done);
> +
>  #endif
> -- 
> 1.7.12.4
> 


More information about the wayland-devel mailing list