tests: Add capture_screenshot_of_output()
authorBryce Harrington <bryce@osg.samsung.com>
Thu, 14 May 2015 22:07:55 +0000 (15:07 -0700)
committerBryce Harrington <bryce@osg.samsung.com>
Thu, 21 May 2015 22:06:43 +0000 (15:06 -0700)
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>
tests/internal-screenshot-test.c

index b855c6a012a2694d5a86a246c8648f57b431e30d..b570733679b790a98fbcd45f201d31b3472dcef4 100644 (file)
@@ -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);