From 8aaef7d48ccd214a4b5c68cc8f35bbc7a1b458fd Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Fri, 8 Feb 2013 17:01:25 +0200 Subject: [PATCH] tests: add frame callback waiting helpers 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. Signed-off-by: Pekka Paalanen --- 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 1a1b4f13..8d846ff3 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 27042b25..c576dcdf 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