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);
META_EXPORT_TEST
gboolean meta_is_udev_test_device (GUdevDevice *device);
gboolean meta_is_udev_device_preferred_primary (GUdevDevice *device);

View File

@ -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',

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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);
}