summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBryce Harrington <bryce@osg.samsung.com>2015-05-14 15:07:55 -0700
committerBryce Harrington <bryce@osg.samsung.com>2015-05-21 15:06:43 -0700
commit111e022e91f4c3b8c70f74087b46df849e99bbad (patch)
tree714fcd23ce30c3704e149a06937ebbede25aa626 /tests
parent39a5be2a1fbb2a2664e85f38855a2be39335c8a5 (diff)
downloadweston-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.c56
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);