From ef43bec374a09b9fe3679af9a30ee927c09675aa Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Fri, 14 Feb 2025 14:50:20 +0800 Subject: [PATCH] tests/kms: Ignore real GPUs when only VKMS is wanted This prevents spurious test failures on machines with a real GPU as well as VKMS. Part-of: --- src/backends/meta-udev.h | 1 + src/tests/meson.build | 6 +++++- src/tests/meta-kms-test-utils.c | 25 +++++++++++++++++++++++++ src/tests/meta-kms-test-utils.h | 3 +++ src/tests/native-kms-headless-start.c | 11 ++++------- src/tests/native-kms-hotplug.c | 21 +++++---------------- 6 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/backends/meta-udev.h b/src/backends/meta-udev.h index 47a4fd39b..aac4da0ef 100644 --- a/src/backends/meta-udev.h +++ b/src/backends/meta-udev.h @@ -42,6 +42,7 @@ gboolean meta_is_udev_device_disable_vrr (GUdevDevice *device); gboolean meta_is_udev_device_ignore (GUdevDevice *device); +META_EXPORT_TEST gboolean meta_is_udev_test_device (GUdevDevice *device); gboolean meta_is_udev_device_preferred_primary (GUdevDevice *device); diff --git a/src/tests/meson.build b/src/tests/meson.build index 94265c491..50b48e2fc 100644 --- a/src/tests/meson.build +++ b/src/tests/meson.build @@ -653,7 +653,11 @@ kms_test_cases = [ { 'name': 'kms-headless-start', 'suite': 'backend/native/kms', - 'sources': [ 'native-kms-headless-start.c', ], + 'sources': [ + 'meta-kms-test-utils.c', + 'meta-kms-test-utils.h', + 'native-kms-headless-start.c', + ], }, { 'name': 'kms-hotplug', diff --git a/src/tests/meta-kms-test-utils.c b/src/tests/meta-kms-test-utils.c index d40744205..51bd1e96c 100644 --- a/src/tests/meta-kms-test-utils.c +++ b/src/tests/meta-kms-test-utils.c @@ -165,3 +165,28 @@ meta_get_mode_rect (MetaKmsMode *mode) meta_kms_mode_get_width (mode), meta_kms_mode_get_height (mode)); } + +GUdevDevice * +meta_get_test_udev_device (MetaUdev *udev) +{ + g_autolist (GObject) list = NULL; + g_autoptr (GError) error = NULL; + GUdevDevice *test_device = NULL; + GList *l; + + list = meta_udev_list_drm_devices (udev, META_UDEV_DEVICE_TYPE_CARD, &error); + + for (l = list; l; l = l->next) + { + GUdevDevice *udev_device = l->data; + + if (meta_is_udev_test_device (udev_device)) + { + g_assert_null (test_device); + g_set_object (&test_device, udev_device); + } + } + + g_assert_nonnull (test_device); + return test_device; +} diff --git a/src/tests/meta-kms-test-utils.h b/src/tests/meta-kms-test-utils.h index 344bf5b94..5024f7cb6 100644 --- a/src/tests/meta-kms-test-utils.h +++ b/src/tests/meta-kms-test-utils.h @@ -18,6 +18,7 @@ #pragma once +#include "backends/meta-udev.h" #include "backends/native/meta-drm-buffer.h" #include "backends/native/meta-kms-types.h" #include "meta/meta-context.h" @@ -45,3 +46,5 @@ MetaDrmBuffer * meta_create_test_mode_dumb_buffer (MetaKmsDevice *device, MetaFixed16Rectangle meta_get_mode_fixed_rect_16 (MetaKmsMode *mode); MtkRectangle meta_get_mode_rect (MetaKmsMode *mode); + +GUdevDevice * meta_get_test_udev_device (MetaUdev *udev); diff --git a/src/tests/native-kms-headless-start.c b/src/tests/native-kms-headless-start.c index bea310fe5..9dda31102 100644 --- a/src/tests/native-kms-headless-start.c +++ b/src/tests/native-kms-headless-start.c @@ -26,6 +26,7 @@ #include "core/display-private.h" #include "meta-test/meta-context-test.h" #include "tests/drm-mock/drm-mock.h" +#include "tests/meta-kms-test-utils.h" #include "tests/meta-monitor-manager-test.h" static MetaContext *test_context; @@ -75,20 +76,16 @@ meta_test_headless_monitor_connect (void) MetaUdev *udev = meta_backend_get_udev (backend); MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); - g_autolist (GObject) udev_devices = NULL; + g_autoptr (GUdevDevice) udev_device = NULL; GList *logical_monitors; MetaLogicalMonitor *logical_monitor; MtkRectangle monitor_layout; ClutterActor *stage; - g_autoptr (GError) error = NULL; drm_mock_unset_resource_filter (DRM_MOCK_CALL_FILTER_GET_CONNECTOR); - udev_devices = meta_udev_list_drm_devices (udev, - META_UDEV_DEVICE_TYPE_CARD, - &error); - g_assert_cmpuint (g_list_length (udev_devices), ==, 1); - g_signal_emit_by_name (udev, "hotplug", g_list_first (udev_devices)->data); + udev_device = meta_get_test_udev_device (udev); + g_signal_emit_by_name (udev, "hotplug", udev_device); logical_monitors = meta_monitor_manager_get_logical_monitors (monitor_manager); diff --git a/src/tests/native-kms-hotplug.c b/src/tests/native-kms-hotplug.c index 193166e26..fff413e89 100644 --- a/src/tests/native-kms-hotplug.c +++ b/src/tests/native-kms-hotplug.c @@ -27,6 +27,7 @@ #include "meta-test/meta-context-test.h" #include "tests/drm-mock/drm-mock.h" #include "tests/meta-test-utils.h" +#include "tests/meta-kms-test-utils.h" typedef enum _State { @@ -137,21 +138,15 @@ meta_test_disconnect_connect (void) meta_backend_get_monitor_manager (backend); ClutterActor *stage = meta_backend_get_stage (backend); MetaUdev *udev = meta_backend_get_udev (backend); - g_autolist (GObject) udev_devices = NULL; - GUdevDevice *udev_device; + g_autoptr (GUdevDevice) udev_device = NULL; GList *logical_monitors; gulong after_paint_handler_id; gulong presented_handler_id; ClutterStageView *view; CoglFramebuffer *onscreen; - g_autoptr (GError) error = NULL; State state; - udev_devices = meta_udev_list_drm_devices (udev, - META_UDEV_DEVICE_TYPE_CARD, - &error); - g_assert_cmpuint (g_list_length (udev_devices), ==, 1); - udev_device = g_list_first (udev_devices)->data; + udev_device = meta_get_test_udev_device (udev); logical_monitors = meta_monitor_manager_get_logical_monitors (monitor_manager); @@ -372,15 +367,9 @@ emulate_hotplug (void) { MetaBackend *backend = meta_context_get_backend (test_context); MetaUdev *udev = meta_backend_get_udev (backend); - g_autoptr (GError) error = NULL; - g_autolist (GObject) udev_devices = NULL; - GUdevDevice *udev_device; + g_autoptr (GUdevDevice) udev_device = NULL; - udev_devices = meta_udev_list_drm_devices (udev, - META_UDEV_DEVICE_TYPE_CARD, - &error); - g_assert_cmpuint (g_list_length (udev_devices), ==, 1); - udev_device = g_list_first (udev_devices)->data; + udev_device = meta_get_test_udev_device (udev); g_signal_emit_by_name (udev, "hotplug", udev_device); }