[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