From fa29286c98a6d3b8d9050ecbf9b8e0dc2ab9ff25 Mon Sep 17 00:00:00 2001 From: hujianwei Date: Sat, 5 Nov 2022 08:12:29 +0000 Subject: [PATCH] Check in files for buffer scale tests * tests/buffer_scale_1_1.dump: * tests/buffer_scale_1_2.dump: * tests/buffer_scale_1_2_1.dump: * tests/buffer_scale_1_2_2.dump: * tests/buffer_scale_2_1.dump: * tests/buffer_scale_2_2.dump: * tests/buffer_scale_2_2_1.dump: * tests/buffer_scale_2_2_2.dump: * tests/scale.png: * tests/scale_damage.png: * tests/scale_test.c: New files. --- tests/buffer_scale_1_1.dump | Bin 0 -> 1000012 bytes tests/buffer_scale_1_2.dump | Bin 0 -> 1000012 bytes tests/buffer_scale_1_2_1.dump | Bin 0 -> 4000012 bytes tests/buffer_scale_1_2_2.dump | Bin 0 -> 4000012 bytes tests/buffer_scale_2_1.dump | Bin 0 -> 250012 bytes tests/buffer_scale_2_2.dump | Bin 0 -> 250012 bytes tests/buffer_scale_2_2_1.dump | Bin 0 -> 1000012 bytes tests/buffer_scale_2_2_2.dump | Bin 0 -> 1000012 bytes tests/scale.png | Bin 0 -> 1301 bytes tests/scale_damage.png | Bin 0 -> 1882 bytes tests/scale_test.c | 267 ++++++++++++++++++++++++++++++++++ 11 files changed, 267 insertions(+) create mode 100644 tests/buffer_scale_1_1.dump create mode 100644 tests/buffer_scale_1_2.dump create mode 100644 tests/buffer_scale_1_2_1.dump create mode 100644 tests/buffer_scale_1_2_2.dump create mode 100644 tests/buffer_scale_2_1.dump create mode 100644 tests/buffer_scale_2_2.dump create mode 100644 tests/buffer_scale_2_2_1.dump create mode 100644 tests/buffer_scale_2_2_2.dump create mode 100644 tests/scale.png create mode 100644 tests/scale_damage.png create mode 100644 tests/scale_test.c diff --git a/tests/buffer_scale_1_1.dump b/tests/buffer_scale_1_1.dump new file mode 100644 index 0000000000000000000000000000000000000000..c2735e31b7cf350ceca0c0d906b139f9dca1790d GIT binary patch literal 1000012 zcmeIwK@9*P5Cg&Xg@0#=xjzIQOp`UxOf#J(d*$uO2MjR400Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 t00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}T9W-~x<0`zHVZ literal 0 HcmV?d00001 diff --git a/tests/buffer_scale_1_2.dump b/tests/buffer_scale_1_2.dump new file mode 100644 index 0000000000000000000000000000000000000000..da6679bc2781a59589fc8def533a7f0300e05403 GIT binary patch literal 1000012 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 afj<%@o(zm}ZcFPx9`khdb6Mw<&;$TF_v;n_ literal 0 HcmV?d00001 diff --git a/tests/scale_damage.png b/tests/scale_damage.png new file mode 100644 index 0000000000000000000000000000000000000000..0b323d028d9b4e1bac9fad5ad507184076f57a57 GIT binary patch literal 1882 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8Y985qFmn|N5ft;31XXgM_iqWrYXoKyw| zjfu4rZ9NV<$Q+HgU*f9GS0+$+B4DmgM_0$>u!S6=PHQi$YCgF%{=yPP&%#2H7;e5g zoiN#$Ii;lqqAUmb1>DuuUBxv&)_X2=?O{Lux1#)g;dj0d=2||c&B+a`BHgTJ3T)aL zs`#Z#jz!Q>!dS@ot7V|i!Qz^`hmT+1ZE^mS-S_7&LO-c7*D!t5xy;*L(Oi*r`I6;( zVfRSSppNsM?!3DcJ}O^Noqpd!T=v`NGb<)~o)>oSY)xW6EqlhR&CAA9COD+`)8EMH zqUWOLT=nYR`tD@B#K~;!(=p2}TU5k0vIsJzTnTVv6??QLYsn0c%XNni+rRkXT6FS> zR`bMU#?TcLWbA*)|9N*!$ERnv=R}qZUz2XjA9lzP&$yQR`}d7)v(+6QNbb0F>t7c0 zjDIS7?_EoBcerm>P=G51RGo{KF!`*63SIWcRV{{lt}XMsm#F#`j)FbFd;%$g$s z6l5>)^mS!_#?8tm$5xtA>H-wfE^&=0an8@pP0cG|a4t$sEJ;mKD9!QZmB3WPXqYM(jm03K5UOevgGQ}Ig#TzDLlYu6z2Hew4tHW1kdif! z2~OTHAs7uy{4g3zCIAYdszxygGs__7rcrC5#R@nCsUOIM$~us|%+;-rSz6`=1!aSH Mp00i_>zopr0Cv=NssI20 literal 0 HcmV?d00001 diff --git a/tests/scale_test.c b/tests/scale_test.c new file mode 100644 index 0000000..d8e177d --- /dev/null +++ b/tests/scale_test.c @@ -0,0 +1,267 @@ +/* Tests for the Wayland compositor running on the X server. + +Copyright (C) 2022 to various contributors. + +This file is part of 12to11. + +12to11 is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or (at your +option) any later version. + +12to11 is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with 12to11. If not, see . */ + +#include "test_harness.h" + +/* Tests for buffer scaling. */ + +enum test_kind + { + MAP_WINDOW_KIND, + BUFFER_SCALE_1_KIND, + BUFFER_SCALE_2_KIND, + BUFFER_SCALE_1_2_KIND, + BUFFER_SCALE_2_2_KIND, + }; + +static const char *test_names[] = + { + "map_window", + "buffer_scale_1", + "buffer_scale_2", + "buffer_scale_1_2", + "buffer_scale_2_2", + }; + +#define LAST_TEST BUFFER_SCALE_2_2_KIND + +/* The display. */ +static struct test_display *display; + +/* Test interfaces. */ +static struct test_interface test_interfaces[] = + { + /* No interfaces. */ + }; + +/* The test surface window. */ +static Window test_surface_window; + +/* The test surface and Wayland surface. */ +static struct test_surface *test_surface; +static struct wl_surface *wayland_surface; + + + +/* Forward declarations. */ +static void wait_frame_callback (struct wl_surface *); + + + +static void +do_scale_damage_test (int scale, const char *dump_1_name, + const char *dump_2_name) +{ + struct wl_buffer *buffer, *damaged_buffer; + int scaled_x1, scaled_y1, scaled_x2, scaled_y2; + + buffer = load_png_image (display, "scale.png"); + + if (!buffer) + report_test_failure ("failed to load scale.png"); + + damaged_buffer = load_png_image (display, "scale_damage.png"); + + if (!damaged_buffer) + report_test_failure ("failed to load scale_damage.png"); + + wl_surface_set_buffer_scale (wayland_surface, scale); + wl_surface_attach (wayland_surface, buffer, 0, 0); + wl_surface_damage (wayland_surface, 0, 0, INT_MAX, INT_MAX); + wait_frame_callback (wayland_surface); + + /* Verify the image without any damage applied. */ + verify_image_data (display, test_surface_window, dump_1_name); + + /* Now, load the damaged buffer and apply buffer damage. */ + wl_surface_attach (wayland_surface, damaged_buffer, 0, 0); + wl_surface_damage_buffer (wayland_surface, 25, 25, 450, 450); + wait_frame_callback (wayland_surface); + + /* Verify the image with damage applied. */ + verify_image_data (display, test_surface_window, dump_2_name); + + /* Now, reattach the undamaged buffer and apply surface damage. */ + wl_surface_attach (wayland_surface, buffer, 0, 0); + scaled_x1 = floor (25.0 / scale); + scaled_y1 = floor (25.0 / scale); + scaled_x2 = ceil ((25 + 450.0) / scale); + scaled_y2 = ceil ((25 + 450.0) / scale); + wl_surface_damage (wayland_surface, scaled_x1, scaled_y1, + scaled_x2 - scaled_x1, scaled_y2 - scaled_y1); + wait_frame_callback (wayland_surface); + + /* Verify that the surface with the damage reverted is the same + as the initial contents of the surface. */ + verify_image_data (display, test_surface_window, dump_1_name); + + /* Free both buffers. */ + wl_buffer_destroy (buffer); + wl_buffer_destroy (damaged_buffer); +} + +static void +test_single_step (enum test_kind kind) +{ + struct wl_buffer *buffer; + + test_log ("running test step: %s", test_names[kind]); + + switch (kind) + { + case MAP_WINDOW_KIND: + buffer = load_png_image (display, "blue.png"); + + if (!buffer) + report_test_failure ("failed to load blue.png"); + + wl_surface_attach (wayland_surface, buffer, 0, 0); + wl_surface_damage (wayland_surface, 0, 0, INT_MAX, INT_MAX); + wl_surface_commit (wayland_surface); + wl_buffer_destroy (buffer); + break; + + case BUFFER_SCALE_1_KIND: + do_scale_damage_test (1, "buffer_scale_1_1.dump", + "buffer_scale_1_2.dump"); + test_single_step (BUFFER_SCALE_2_KIND); + break; + + case BUFFER_SCALE_2_KIND: + do_scale_damage_test (2, "buffer_scale_2_1.dump", + "buffer_scale_2_2.dump"); + test_single_step (BUFFER_SCALE_1_2_KIND); + break; + + case BUFFER_SCALE_1_2_KIND: + /* Now the buffer should be scaled up to 1000x1000. */ + test_set_scale (display, 2); + do_scale_damage_test (1, "buffer_scale_1_2_1.dump", + "buffer_scale_1_2_2.dump"); + test_single_step (BUFFER_SCALE_2_2_KIND); + break; + + case BUFFER_SCALE_2_2_KIND: + /* And the buffer should not be scaled at all. */ + test_set_scale (display, 2); + do_scale_damage_test (2, "buffer_scale_2_2_1.dump", + "buffer_scale_2_2_2.dump"); + break; + } + + if (kind == LAST_TEST) + test_complete (); +} + + + +static void +handle_test_surface_mapped (void *data, struct test_surface *surface, + uint32_t xid, const char *display_string) +{ + /* Sleep for 1 second to ensure that the window is exposed and + redirected. */ + sleep (1); + + /* Start the test. */ + test_surface_window = xid; + + /* Run the test again. */ + test_single_step (BUFFER_SCALE_1_KIND); +} + +static const struct test_surface_listener test_surface_listener = + { + handle_test_surface_mapped, + }; + + + +static void +handle_wl_callback_done (void *data, struct wl_callback *callback, + uint32_t callback_data) +{ + bool *flag; + + wl_callback_destroy (callback); + + /* Now tell wait_frame_callback to break out of the loop. */ + flag = data; + *flag = true; +} + +static const struct wl_callback_listener wl_callback_listener = + { + handle_wl_callback_done, + }; + + + +static void +wait_frame_callback (struct wl_surface *surface) +{ + struct wl_callback *callback; + bool flag; + + /* Commit surface and wait for a frame callback. */ + + callback = wl_surface_frame (surface); + flag = false; + + wl_callback_add_listener (callback, &wl_callback_listener, + &flag); + wl_surface_commit (surface); + + while (!flag) + { + if (wl_display_dispatch (display->display) == -1) + die ("wl_display_dispatch"); + } +} + +static void +run_test (void) +{ + if (!make_test_surface (display, &wayland_surface, + &test_surface)) + report_test_failure ("failed to create test surface"); + + test_surface_add_listener (test_surface, &test_surface_listener, + NULL); + test_single_step (MAP_WINDOW_KIND); + + while (true) + { + if (wl_display_dispatch (display->display) == -1) + die ("wl_display_dispatch"); + } +} + +int +main (void) +{ + test_init (); + display = open_test_display (test_interfaces, + ARRAYELTS (test_interfaces)); + + if (!display) + report_test_failure ("failed to open display"); + + run_test (); +}