From: Bryce Harrington Date: Thu, 14 May 2015 22:07:55 +0000 (-0700) Subject: tests: Add capture_screenshot_of_output() X-Git-Tag: 1.7.93~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=111e022e91f4c3b8c70f74087b46df849e99bbad;p=platform%2Fupstream%2Fweston.git tests: Add capture_screenshot_of_output() Provides a convenience function for JFDI grabbing of a single screenshot. Tests that are doing multiple screenshots or other fanciness probably will bypass this routine and do things more manually, but this'll provide a reference implementation. And hopefully there'll be enough simple cases that this actually is useful. Signed-off-by: Bryce Harrington Reviewed-By: Derek Foreman --- diff --git a/tests/internal-screenshot-test.c b/tests/internal-screenshot-test.c index b855c6a0..b5707336 100644 --- a/tests/internal-screenshot-test.c +++ b/tests/internal-screenshot-test.c @@ -141,38 +141,29 @@ create_screenshot_surface(struct client *client) { return screenshot; } -TEST(internal_screenshot) -{ - struct client *client; - struct surface *screenshot = NULL; - struct surface *reference = NULL; - struct rectangle clip; - const char *fname; - bool match = false; - bool dump_all_images = true; - - printf("Starting test\n"); - - /* Create the client */ - client = create_client_and_test_surface(100, 100, 100, 100); - assert(client); - printf("Client created\n"); +/** capture_screenshot_of_output() + * + * Requests a screenshot from the server of the output that the + * client appears on. The image data returned from the server + * can be accessed from the screenshot surface's data member. + * + * @returns a new surface object, which should be free'd when no + * longer needed. + */ +static struct surface * +capture_screenshot_of_output(struct client *client) { + struct surface *screenshot; /* Create a surface to hold the screenshot */ screenshot = create_screenshot_surface(client); - assert(screenshot); - printf("Screenshot buffer created and attached to surface\n"); - /* Take a snapshot. Result will be in screenshot->wl_buffer. */ client->test->buffer_copy_done = 0; weston_test_capture_screenshot(client->test->weston_test, client->output->wl_output, screenshot->wl_buffer); - printf("Capture request sent\n"); while (client->test->buffer_copy_done == 0) if (wl_display_dispatch(client->wl_display) < 0) break; - printf("Roundtrip done\n"); /* FIXME: Document somewhere the orientation the screenshot is taken * and how the clip coords are interpreted, in case of scaling/transform. @@ -180,6 +171,29 @@ TEST(internal_screenshot) * Protocol docs in the XML, comparison function docs in Doxygen style. */ + return screenshot; +} + +TEST(internal_screenshot) +{ + struct client *client; + struct surface *screenshot = NULL; + struct surface *reference = NULL; + struct rectangle clip; + const char *fname; + bool match = false; + bool dump_all_images = true; + + /* Create the client */ + printf("Creating client for test\n"); + client = create_client_and_test_surface(100, 100, 100, 100); + assert(client); + + /* Take a snapshot. Result will be in screenshot->wl_buffer. */ + printf("Taking a screenshot\n"); + screenshot = capture_screenshot_of_output(client); + assert(screenshot); + /* Load reference image */ fname = screenshot_reference_filename("internal-screenshot", 0); printf("Loading reference image %s\n", fname);