From bc22380754ec6f64c8aa33c38eaa092e6163e4e3 Mon Sep 17 00:00:00 2001 From: hujianwei Date: Fri, 18 Nov 2022 02:38:36 +0000 Subject: [PATCH] Add buffer release test * tests/Imakefile (OBJS15, SRCS15): New files. (PROGRAMS): Add buffer_test. (buffer_test): New program target. * tests/run_tests.sh (standard_tests): Add buffer_test. * tests/svnignore.txt: Add buffer_test * tests/test_harness.c (handle_wl_buffer_release, get_test_buffer) (test_buffer_committed, verify_buffer_released): New functions. * tests/test_harness.h (struct test_buffer): New struct. --- tests/Imakefile | 15 ++++++++------ tests/run_tests.sh | 2 +- tests/svnignore.txt | 1 + tests/test_harness.c | 49 ++++++++++++++++++++++++++++++++++++++++++++ tests/test_harness.h | 13 ++++++++++++ 5 files changed, 73 insertions(+), 7 deletions(-) diff --git a/tests/Imakefile b/tests/Imakefile index 927008d..fe00a46 100644 --- a/tests/Imakefile +++ b/tests/Imakefile @@ -58,7 +58,9 @@ ScannerTarget(single-pixel-buffer-v1) OBJS13 = $(COMMONSRCS) xdg_activation_test.o SRCS14 = $(COMMONSRCS) single_pixel_buffer_test.c OBJS14 = $(COMMONSRCS) single_pixel_buffer_test.o - PROGRAMS = imgview simple_test damage_test transform_test viewporter_test subsurface_test scale_test seat_test dmabuf_test select_test select_helper select_helper_multiple xdg_activation_test single_pixel_buffer_test + SRCS15 = $(COMMONSRCS) buffer_test.c + OBJS15 = $(COMMONSRCS) buffer_test.o + PROGRAMS = imgview simple_test damage_test transform_test viewporter_test subsurface_test scale_test seat_test dmabuf_test select_test select_helper select_helper_multiple xdg_activation_test single_pixel_buffer_test buffer_test /* Make all objects depend on HEADER. */ $(OBJS1): $(HEADER) @@ -74,17 +76,18 @@ NormalProgramTarget(viewporter_test,$(OBJS5),NullParameter,$(LOCAL_LIBRARIES),Nu NormalProgramTarget(subsurface_test,$(OBJS6),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(scale_test,$(OBJS7),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(seat_test,$(OBJS8),NullParameter,$(LOCAL_LIBRARIES),NullParameter) -NormalProgramTarget(dmabuf_test,$(OBJS9),NullParameter,$(LOCAL_LIBRARIES) $(GBM) $(DRM),NullParameter); -NormalProgramTarget(select_test,$(OBJS10),NullParameter,$(LOCAL_LIBRARIES) ThreadsLibraries,NullParameter); -NormalProgramTarget(select_helper,$(OBJS11),NullParameter,$(XLIB),NullParameter); -NormalProgramTarget(select_helper_multiple,$(OBJS12),NullParameter,$(XLIB),NullParameter); +NormalProgramTarget(dmabuf_test,$(OBJS9),NullParameter,$(LOCAL_LIBRARIES) $(GBM) $(DRM),NullParameter) +NormalProgramTarget(select_test,$(OBJS10),NullParameter,$(LOCAL_LIBRARIES) ThreadsLibraries,NullParameter) +NormalProgramTarget(select_helper,$(OBJS11),NullParameter,$(XLIB),NullParameter) +NormalProgramTarget(select_helper_multiple,$(OBJS12),NullParameter,$(XLIB),NullParameter) NormalProgramTarget(xdg_activation_test,$(OBJS13),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(single_pixel_buffer_test,$(OBJS14),NullParameter,$(LOCAL_LIBRARIES),NullParameter) +NormalProgramTarget(buffer_test,$(OBJS15),NullParameter,$(LOCAL_LIBRARIES),NullParameter) DependTarget3($(SRCS1),$(SRCS2),$(SRCS3)) DependTarget3($(SRCS4),$(SRCS5),$(SRCS6)) DependTarget3($(SRCS7),$(SRCS8),$(SRCS9)) DependTarget3($(SRCS10),$(SRCS11),$(SRCS12)) -DependTarget3($(SRCS13),$(SRCS14),NullParameter) +DependTarget3($(SRCS13),$(SRCS14),$(SRCS15)) all:: $(PROGRAMS) diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 416091c..72b125f 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -22,7 +22,7 @@ pushd "$(dirname $0)" declare -a standard_tests=( simple_test damage_test transform_test viewporter_test subsurface_test scale_test seat_test dmabuf_test - xdg_activation_test single_pixel_buffer_test + xdg_activation_test single_pixel_buffer_test buffer_test ) make -C . "${standard_tests[@]}" diff --git a/tests/svnignore.txt b/tests/svnignore.txt index 959f251..7c81a58 100644 --- a/tests/svnignore.txt +++ b/tests/svnignore.txt @@ -14,6 +14,7 @@ select_helper select_helper_multiple xdg_activation_test single_pixel_buffer_test +buffer_test imgview reject.dump Makefile diff --git a/tests/test_harness.c b/tests/test_harness.c index 19aaab5..b6e9301 100644 --- a/tests/test_harness.c +++ b/tests/test_harness.c @@ -1032,3 +1032,52 @@ verify_window_size (struct test_display *display, ", actual: %d %d", width, height, attrs.width, attrs.height); } + + + +static void +handle_wl_buffer_release (void *data, struct wl_buffer *buffer) +{ + struct test_buffer *test_buffer; + + test_buffer = data; + test_buffer->is_busy = false; +} + +static const struct wl_buffer_listener test_buffer_listener = + { + handle_wl_buffer_release, + }; + + + +struct test_buffer * +get_test_buffer (struct test_display *display, struct wl_buffer *buffer) +{ + struct test_buffer *test_buffer; + + test_buffer = malloc (sizeof *test_buffer); + + if (!test_buffer) + return NULL; + + test_buffer->buffer = buffer; + test_buffer->is_busy = false; + + wl_buffer_add_listener (buffer, &test_buffer_listener, test_buffer); + return test_buffer; +} + +void +test_buffer_committed (struct test_buffer *test_buffer) +{ + test_buffer->is_busy = true; +} + +void +verify_buffer_released (struct test_buffer *test_buffer) +{ + if (test_buffer->is_busy) + report_test_failure ("buffer %p should not be busy right now", + test_buffer->buffer); +} diff --git a/tests/test_harness.h b/tests/test_harness.h index a5a0ebe..ba9f386 100644 --- a/tests/test_harness.h +++ b/tests/test_harness.h @@ -110,6 +110,15 @@ struct test_interface uint32_t version; }; +struct test_buffer +{ + /* The associated struct wl_buffer. */ + struct wl_buffer *buffer; + + /* Whether or not the buffer is busy. */ + int is_busy; +}; + struct image_data_header { /* Currently 1. High bit is byte order. */ @@ -160,6 +169,10 @@ extern void test_set_scale (struct test_display *, int); extern void test_init_seat (struct test_display *); extern uint32_t test_get_serial (struct test_display *); extern void verify_window_size (struct test_display *, Window, int, int); +extern struct test_buffer *get_test_buffer (struct test_display *, + struct wl_buffer *); +extern void test_buffer_committed (struct test_buffer *); +extern void verify_buffer_released (struct test_buffer *); #define ARRAYELTS(arr) (sizeof (arr) / sizeof (arr)[0])