From 79491b41f5cf375eee04ba0584b35d80c043cb92 Mon Sep 17 00:00:00 2001 From: Leandro Ribeiro Date: Sat, 17 Oct 2020 15:08:25 -0300 Subject: [PATCH] tests: drop test suite screenshooter implementation and protocol extension This is a follow-up of commit "tests: start to use Weston's default screenshooter in the test suite". As we've started to use Weston's default screenshooter implementation and protocol extension in the test suite, we don't need what we've created specifically for the test suite anymore. Drop test suite screenshooter implementation and protocol extension. Signed-off-by: Leandro Ribeiro --- protocol/weston-test.xml | 16 --- tests/weston-test.c | 245 --------------------------------------- 2 files changed, 261 deletions(-) diff --git a/protocol/weston-test.xml b/protocol/weston-test.xml index 00b7185d..f880414d 100644 --- a/protocol/weston-test.xml +++ b/protocol/weston-test.xml @@ -80,22 +80,6 @@ - - - Records an image of what is currently displayed on a given - display output, returning the image as an event. - - - - - - - The capture_screenshot_done signal is sent when a screenshot has been copied into the - provided buffer. - - diff --git a/tests/weston-test.c b/tests/weston-test.c index ce4dcf29..be80bf92 100644 --- a/tests/weston-test.c +++ b/tests/weston-test.c @@ -338,250 +338,6 @@ device_add(struct wl_client *client, } } -enum weston_test_screenshot_outcome { - WESTON_TEST_SCREENSHOT_SUCCESS, - WESTON_TEST_SCREENSHOT_NO_MEMORY, - WESTON_TEST_SCREENSHOT_BAD_BUFFER - }; - -typedef void (*weston_test_screenshot_done_func_t)(void *data, - enum weston_test_screenshot_outcome outcome); - -struct test_screenshot { - struct weston_compositor *compositor; - struct wl_global *global; - struct wl_client *client; - struct weston_process process; - struct wl_listener destroy_listener; -}; - -struct test_screenshot_frame_listener { - struct wl_listener listener; - struct weston_buffer *buffer; - struct weston_output *output; - weston_test_screenshot_done_func_t done; - void *data; -}; - -static void -copy_bgra_yflip(uint8_t *dst, uint8_t *src, int height, int stride) -{ - uint8_t *end; - - end = dst + height * stride; - while (dst < end) { - memcpy(dst, src, stride); - dst += stride; - src -= stride; - } -} - - -static void -copy_bgra(uint8_t *dst, uint8_t *src, int height, int stride) -{ - /* TODO: optimize this out */ - memcpy(dst, src, height * stride); -} - -static void -copy_row_swap_RB(void *vdst, void *vsrc, int bytes) -{ - uint32_t *dst = vdst; - uint32_t *src = vsrc; - uint32_t *end = dst + bytes / 4; - - while (dst < end) { - uint32_t v = *src++; - /* A R G B */ - uint32_t tmp = v & 0xff00ff00; - tmp |= (v >> 16) & 0x000000ff; - tmp |= (v << 16) & 0x00ff0000; - *dst++ = tmp; - } -} - -static void -copy_rgba_yflip(uint8_t *dst, uint8_t *src, int height, int stride) -{ - uint8_t *end; - - end = dst + height * stride; - while (dst < end) { - copy_row_swap_RB(dst, src, stride); - dst += stride; - src -= stride; - } -} - -static void -copy_rgba(uint8_t *dst, uint8_t *src, int height, int stride) -{ - uint8_t *end; - - end = dst + height * stride; - while (dst < end) { - copy_row_swap_RB(dst, src, stride); - dst += stride; - src += stride; - } -} - -static void -test_screenshot_frame_notify(struct wl_listener *listener, void *data) -{ - struct test_screenshot_frame_listener *l = - container_of(listener, - struct test_screenshot_frame_listener, listener); - struct weston_output *output = l->output; - struct weston_compositor *compositor = output->compositor; - int32_t stride; - uint8_t *pixels, *d, *s; - - weston_output_disable_planes_decr(output); - wl_list_remove(&listener->link); - stride = l->buffer->width * (PIXMAN_FORMAT_BPP(compositor->read_format) / 8); - pixels = malloc(stride * l->buffer->height); - - if (pixels == NULL) { - l->done(l->data, WESTON_TEST_SCREENSHOT_NO_MEMORY); - free(l); - return; - } - - /* FIXME: Needs to handle output transformations */ - - compositor->renderer->read_pixels(output, - compositor->read_format, - pixels, - 0, 0, - output->current_mode->width, - output->current_mode->height); - - stride = wl_shm_buffer_get_stride(l->buffer->shm_buffer); - - d = wl_shm_buffer_get_data(l->buffer->shm_buffer); - s = pixels + stride * (l->buffer->height - 1); - - wl_shm_buffer_begin_access(l->buffer->shm_buffer); - - /* XXX: It would be nice if we used Pixman to do all this rather - * than our own implementation - */ - switch (compositor->read_format) { - case PIXMAN_a8r8g8b8: - case PIXMAN_x8r8g8b8: - if (compositor->capabilities & WESTON_CAP_CAPTURE_YFLIP) - copy_bgra_yflip(d, s, output->current_mode->height, stride); - else - copy_bgra(d, pixels, output->current_mode->height, stride); - break; - case PIXMAN_x8b8g8r8: - case PIXMAN_a8b8g8r8: - if (compositor->capabilities & WESTON_CAP_CAPTURE_YFLIP) - copy_rgba_yflip(d, s, output->current_mode->height, stride); - else - copy_rgba(d, pixels, output->current_mode->height, stride); - break; - default: - break; - } - - wl_shm_buffer_end_access(l->buffer->shm_buffer); - - l->done(l->data, WESTON_TEST_SCREENSHOT_SUCCESS); - free(pixels); - free(l); -} - -static bool -weston_test_screenshot_shoot(struct weston_output *output, - struct weston_buffer *buffer, - weston_test_screenshot_done_func_t done, - void *data) -{ - struct test_screenshot_frame_listener *l; - - /* Get the shm buffer resource the client created */ - if (!wl_shm_buffer_get(buffer->resource)) { - done(data, WESTON_TEST_SCREENSHOT_BAD_BUFFER); - return false; - } - - buffer->shm_buffer = wl_shm_buffer_get(buffer->resource); - buffer->width = wl_shm_buffer_get_width(buffer->shm_buffer); - buffer->height = wl_shm_buffer_get_height(buffer->shm_buffer); - - /* Verify buffer is big enough */ - if (buffer->width < output->current_mode->width || - buffer->height < output->current_mode->height) { - done(data, WESTON_TEST_SCREENSHOT_BAD_BUFFER); - return false; - } - - /* allocate the frame listener */ - l = malloc(sizeof *l); - if (l == NULL) { - done(data, WESTON_TEST_SCREENSHOT_NO_MEMORY); - return false; - } - - /* Set up the listener */ - l->buffer = buffer; - l->output = output; - l->done = done; - l->data = data; - l->listener.notify = test_screenshot_frame_notify; - wl_signal_add(&output->frame_signal, &l->listener); - - /* Fire off a repaint */ - weston_output_disable_planes_incr(output); - weston_output_schedule_repaint(output); - - return true; -} - -static void -capture_screenshot_done(void *data, enum weston_test_screenshot_outcome outcome) -{ - struct wl_resource *resource = data; - - switch (outcome) { - case WESTON_TEST_SCREENSHOT_SUCCESS: - weston_test_send_capture_screenshot_done(resource); - break; - case WESTON_TEST_SCREENSHOT_NO_MEMORY: - wl_resource_post_no_memory(resource); - break; - default: - break; - } -} - - -/** - * Grabs a snapshot of the screen. - */ -static void -capture_screenshot(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *output_resource, - struct wl_resource *buffer_resource) -{ - struct weston_output *output = - weston_head_from_resource(output_resource)->output; - struct weston_buffer *buffer = - weston_buffer_from_resource(buffer_resource); - - if (buffer == NULL) { - wl_resource_post_no_memory(resource); - return; - } - - weston_test_screenshot_shoot(output, buffer, - capture_screenshot_done, resource); -} - static void send_touch(struct wl_client *client, struct wl_resource *resource, uint32_t tv_sec_hi, uint32_t tv_sec_lo, uint32_t tv_nsec, @@ -608,7 +364,6 @@ static const struct weston_test_interface test_implementation = { send_key, device_release, device_add, - capture_screenshot, send_touch, };