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.
This commit is contained in:
hujianwei 2022-11-18 02:38:36 +00:00
parent b35873d200
commit bc22380754
5 changed files with 73 additions and 7 deletions

View file

@ -58,7 +58,9 @@ ScannerTarget(single-pixel-buffer-v1)
OBJS13 = $(COMMONSRCS) xdg_activation_test.o OBJS13 = $(COMMONSRCS) xdg_activation_test.o
SRCS14 = $(COMMONSRCS) single_pixel_buffer_test.c SRCS14 = $(COMMONSRCS) single_pixel_buffer_test.c
OBJS14 = $(COMMONSRCS) single_pixel_buffer_test.o 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. */ /* Make all objects depend on HEADER. */
$(OBJS1): $(HEADER) $(OBJS1): $(HEADER)
@ -74,17 +76,18 @@ NormalProgramTarget(viewporter_test,$(OBJS5),NullParameter,$(LOCAL_LIBRARIES),Nu
NormalProgramTarget(subsurface_test,$(OBJS6),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(subsurface_test,$(OBJS6),NullParameter,$(LOCAL_LIBRARIES),NullParameter)
NormalProgramTarget(scale_test,$(OBJS7),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(scale_test,$(OBJS7),NullParameter,$(LOCAL_LIBRARIES),NullParameter)
NormalProgramTarget(seat_test,$(OBJS8),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(seat_test,$(OBJS8),NullParameter,$(LOCAL_LIBRARIES),NullParameter)
NormalProgramTarget(dmabuf_test,$(OBJS9),NullParameter,$(LOCAL_LIBRARIES) $(GBM) $(DRM),NullParameter); NormalProgramTarget(dmabuf_test,$(OBJS9),NullParameter,$(LOCAL_LIBRARIES) $(GBM) $(DRM),NullParameter)
NormalProgramTarget(select_test,$(OBJS10),NullParameter,$(LOCAL_LIBRARIES) ThreadsLibraries,NullParameter); NormalProgramTarget(select_test,$(OBJS10),NullParameter,$(LOCAL_LIBRARIES) ThreadsLibraries,NullParameter)
NormalProgramTarget(select_helper,$(OBJS11),NullParameter,$(XLIB),NullParameter); NormalProgramTarget(select_helper,$(OBJS11),NullParameter,$(XLIB),NullParameter)
NormalProgramTarget(select_helper_multiple,$(OBJS12),NullParameter,$(XLIB),NullParameter); NormalProgramTarget(select_helper_multiple,$(OBJS12),NullParameter,$(XLIB),NullParameter)
NormalProgramTarget(xdg_activation_test,$(OBJS13),NullParameter,$(LOCAL_LIBRARIES),NullParameter) NormalProgramTarget(xdg_activation_test,$(OBJS13),NullParameter,$(LOCAL_LIBRARIES),NullParameter)
NormalProgramTarget(single_pixel_buffer_test,$(OBJS14),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($(SRCS1),$(SRCS2),$(SRCS3))
DependTarget3($(SRCS4),$(SRCS5),$(SRCS6)) DependTarget3($(SRCS4),$(SRCS5),$(SRCS6))
DependTarget3($(SRCS7),$(SRCS8),$(SRCS9)) DependTarget3($(SRCS7),$(SRCS8),$(SRCS9))
DependTarget3($(SRCS10),$(SRCS11),$(SRCS12)) DependTarget3($(SRCS10),$(SRCS11),$(SRCS12))
DependTarget3($(SRCS13),$(SRCS14),NullParameter) DependTarget3($(SRCS13),$(SRCS14),$(SRCS15))
all:: $(PROGRAMS) all:: $(PROGRAMS)

View file

@ -22,7 +22,7 @@ pushd "$(dirname $0)"
declare -a standard_tests=( declare -a standard_tests=(
simple_test damage_test transform_test viewporter_test simple_test damage_test transform_test viewporter_test
subsurface_test scale_test seat_test dmabuf_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[@]}" make -C . "${standard_tests[@]}"

View file

@ -14,6 +14,7 @@ select_helper
select_helper_multiple select_helper_multiple
xdg_activation_test xdg_activation_test
single_pixel_buffer_test single_pixel_buffer_test
buffer_test
imgview imgview
reject.dump reject.dump
Makefile Makefile

View file

@ -1032,3 +1032,52 @@ verify_window_size (struct test_display *display,
", actual: %d %d", width, height, ", actual: %d %d", width, height,
attrs.width, attrs.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);
}

View file

@ -110,6 +110,15 @@ struct test_interface
uint32_t version; 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 struct image_data_header
{ {
/* Currently 1. High bit is byte order. */ /* 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 void test_init_seat (struct test_display *);
extern uint32_t test_get_serial (struct test_display *); extern uint32_t test_get_serial (struct test_display *);
extern void verify_window_size (struct test_display *, Window, int, int); 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]) #define ARRAYELTS(arr) (sizeof (arr) / sizeof (arr)[0])