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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4274>
This commit is contained in:
Daniel van Vugt 2025-02-14 14:50:20 +08:00 committed by Marge Bot
parent f0993312e5
commit ef43bec374
6 changed files with 43 additions and 24 deletions

View File

@ -42,6 +42,7 @@ gboolean meta_is_udev_device_disable_vrr (GUdevDevice *device);
gboolean meta_is_udev_device_ignore (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_test_device (GUdevDevice *device);
gboolean meta_is_udev_device_preferred_primary (GUdevDevice *device); gboolean meta_is_udev_device_preferred_primary (GUdevDevice *device);

View File

@ -653,7 +653,11 @@ kms_test_cases = [
{ {
'name': 'kms-headless-start', 'name': 'kms-headless-start',
'suite': 'backend/native/kms', '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', 'name': 'kms-hotplug',

View File

@ -165,3 +165,28 @@ meta_get_mode_rect (MetaKmsMode *mode)
meta_kms_mode_get_width (mode), meta_kms_mode_get_width (mode),
meta_kms_mode_get_height (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;
}

View File

@ -18,6 +18,7 @@
#pragma once #pragma once
#include "backends/meta-udev.h"
#include "backends/native/meta-drm-buffer.h" #include "backends/native/meta-drm-buffer.h"
#include "backends/native/meta-kms-types.h" #include "backends/native/meta-kms-types.h"
#include "meta/meta-context.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); MetaFixed16Rectangle meta_get_mode_fixed_rect_16 (MetaKmsMode *mode);
MtkRectangle meta_get_mode_rect (MetaKmsMode *mode); MtkRectangle meta_get_mode_rect (MetaKmsMode *mode);
GUdevDevice * meta_get_test_udev_device (MetaUdev *udev);

View File

@ -26,6 +26,7 @@
#include "core/display-private.h" #include "core/display-private.h"
#include "meta-test/meta-context-test.h" #include "meta-test/meta-context-test.h"
#include "tests/drm-mock/drm-mock.h" #include "tests/drm-mock/drm-mock.h"
#include "tests/meta-kms-test-utils.h"
#include "tests/meta-monitor-manager-test.h" #include "tests/meta-monitor-manager-test.h"
static MetaContext *test_context; static MetaContext *test_context;
@ -75,20 +76,16 @@ meta_test_headless_monitor_connect (void)
MetaUdev *udev = meta_backend_get_udev (backend); MetaUdev *udev = meta_backend_get_udev (backend);
MetaMonitorManager *monitor_manager = MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
g_autolist (GObject) udev_devices = NULL; g_autoptr (GUdevDevice) udev_device = NULL;
GList *logical_monitors; GList *logical_monitors;
MetaLogicalMonitor *logical_monitor; MetaLogicalMonitor *logical_monitor;
MtkRectangle monitor_layout; MtkRectangle monitor_layout;
ClutterActor *stage; ClutterActor *stage;
g_autoptr (GError) error = NULL;
drm_mock_unset_resource_filter (DRM_MOCK_CALL_FILTER_GET_CONNECTOR); drm_mock_unset_resource_filter (DRM_MOCK_CALL_FILTER_GET_CONNECTOR);
udev_devices = meta_udev_list_drm_devices (udev, udev_device = meta_get_test_udev_device (udev);
META_UDEV_DEVICE_TYPE_CARD, g_signal_emit_by_name (udev, "hotplug", udev_device);
&error);
g_assert_cmpuint (g_list_length (udev_devices), ==, 1);
g_signal_emit_by_name (udev, "hotplug", g_list_first (udev_devices)->data);
logical_monitors = logical_monitors =
meta_monitor_manager_get_logical_monitors (monitor_manager); meta_monitor_manager_get_logical_monitors (monitor_manager);

View File

@ -27,6 +27,7 @@
#include "meta-test/meta-context-test.h" #include "meta-test/meta-context-test.h"
#include "tests/drm-mock/drm-mock.h" #include "tests/drm-mock/drm-mock.h"
#include "tests/meta-test-utils.h" #include "tests/meta-test-utils.h"
#include "tests/meta-kms-test-utils.h"
typedef enum _State typedef enum _State
{ {
@ -137,21 +138,15 @@ meta_test_disconnect_connect (void)
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
ClutterActor *stage = meta_backend_get_stage (backend); ClutterActor *stage = meta_backend_get_stage (backend);
MetaUdev *udev = meta_backend_get_udev (backend); MetaUdev *udev = meta_backend_get_udev (backend);
g_autolist (GObject) udev_devices = NULL; g_autoptr (GUdevDevice) udev_device = NULL;
GUdevDevice *udev_device;
GList *logical_monitors; GList *logical_monitors;
gulong after_paint_handler_id; gulong after_paint_handler_id;
gulong presented_handler_id; gulong presented_handler_id;
ClutterStageView *view; ClutterStageView *view;
CoglFramebuffer *onscreen; CoglFramebuffer *onscreen;
g_autoptr (GError) error = NULL;
State state; State state;
udev_devices = meta_udev_list_drm_devices (udev, udev_device = meta_get_test_udev_device (udev);
META_UDEV_DEVICE_TYPE_CARD,
&error);
g_assert_cmpuint (g_list_length (udev_devices), ==, 1);
udev_device = g_list_first (udev_devices)->data;
logical_monitors = logical_monitors =
meta_monitor_manager_get_logical_monitors (monitor_manager); meta_monitor_manager_get_logical_monitors (monitor_manager);
@ -372,15 +367,9 @@ emulate_hotplug (void)
{ {
MetaBackend *backend = meta_context_get_backend (test_context); MetaBackend *backend = meta_context_get_backend (test_context);
MetaUdev *udev = meta_backend_get_udev (backend); MetaUdev *udev = meta_backend_get_udev (backend);
g_autoptr (GError) error = NULL; g_autoptr (GUdevDevice) udev_device = NULL;
g_autolist (GObject) udev_devices = NULL;
GUdevDevice *udev_device;
udev_devices = meta_udev_list_drm_devices (udev, udev_device = meta_get_test_udev_device (udev);
META_UDEV_DEVICE_TYPE_CARD,
&error);
g_assert_cmpuint (g_list_length (udev_devices), ==, 1);
udev_device = g_list_first (udev_devices)->data;
g_signal_emit_by_name (udev, "hotplug", udev_device); g_signal_emit_by_name (udev, "hotplug", udev_device);
} }