diff options
author | Bryce Harrington <bryce@osg.samsung.com> | 2015-05-14 15:07:55 -0700 |
---|---|---|
committer | Bryce Harrington <bryce@osg.samsung.com> | 2015-05-21 15:06:43 -0700 |
commit | 111e022e91f4c3b8c70f74087b46df849e99bbad (patch) | |
tree | 714fcd23ce30c3704e149a06937ebbede25aa626 /tests | |
parent | 39a5be2a1fbb2a2664e85f38855a2be39335c8a5 (diff) | |
download | weston-111e022e91f4c3b8c70f74087b46df849e99bbad.tar.gz |
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 <bryce@osg.samsung.com>
Reviewed-By: Derek Foreman <derekf@osg.samsung.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/internal-screenshot-test.c | 56 |
1 files changed, 35 insertions, 21 deletions
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); |