tests/wayland: Add event queue
Add an event queue to the DRM lease client that allows to check that the compositor sent the expected events in the expected order. For the moment, the event queue is used to check that the initial connection to the compositor works as expected. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4031>
This commit is contained in:
parent
97e50a7285
commit
59c4054c91
@ -25,6 +25,19 @@
|
|||||||
|
|
||||||
#include "drm-lease-v1-client-protocol.h"
|
#include "drm-lease-v1-client-protocol.h"
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DEVICE_DRM_FD,
|
||||||
|
DEVICE_CONNECTOR,
|
||||||
|
DEVICE_DONE,
|
||||||
|
DEVICE_RELEASED,
|
||||||
|
CONNECTOR_NAME,
|
||||||
|
CONNECTOR_DESCRIPTION,
|
||||||
|
CONNECTOR_ID,
|
||||||
|
CONNECTOR_DONE,
|
||||||
|
CONNECTOR_WITHDRAWN,
|
||||||
|
} DrmLeaseEventType;
|
||||||
|
|
||||||
typedef struct _DrmLeaseClient
|
typedef struct _DrmLeaseClient
|
||||||
{
|
{
|
||||||
WaylandDisplay *display;
|
WaylandDisplay *display;
|
||||||
@ -33,6 +46,9 @@ typedef struct _DrmLeaseClient
|
|||||||
* Value: DrmLeaseDevice *device
|
* Value: DrmLeaseDevice *device
|
||||||
*/
|
*/
|
||||||
GHashTable *devices;
|
GHashTable *devices;
|
||||||
|
|
||||||
|
/* Queue of DrmLeaseEventType */
|
||||||
|
GQueue *event_queue;
|
||||||
} DrmLeaseClient;
|
} DrmLeaseClient;
|
||||||
|
|
||||||
typedef struct _DrmLeaseDevice
|
typedef struct _DrmLeaseDevice
|
||||||
@ -60,6 +76,27 @@ typedef struct _DrmLeaseConnector
|
|||||||
gboolean done;
|
gboolean done;
|
||||||
} DrmLeaseConnector;
|
} DrmLeaseConnector;
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_queue_add (GQueue *event_queue,
|
||||||
|
DrmLeaseEventType event_type)
|
||||||
|
{
|
||||||
|
g_queue_push_tail (event_queue, GUINT_TO_POINTER (event_type));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_queue_assert_event (GQueue *event_queue,
|
||||||
|
DrmLeaseEventType expected)
|
||||||
|
{
|
||||||
|
DrmLeaseEventType actual = GPOINTER_TO_UINT (g_queue_pop_head (event_queue));
|
||||||
|
g_assert (expected == actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_queue_assert_empty (GQueue *event_queue)
|
||||||
|
{
|
||||||
|
g_assert_cmpint (g_queue_get_length (event_queue), ==, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static DrmLeaseConnector *
|
static DrmLeaseConnector *
|
||||||
drm_lease_connector_new (DrmLeaseDevice *device)
|
drm_lease_connector_new (DrmLeaseDevice *device)
|
||||||
{
|
{
|
||||||
@ -100,6 +137,8 @@ handle_connector_name (void *user_data,
|
|||||||
DrmLeaseConnector *connector =
|
DrmLeaseConnector *connector =
|
||||||
drm_lease_connector_lookup (device, drm_lease_connector);
|
drm_lease_connector_lookup (device, drm_lease_connector);
|
||||||
|
|
||||||
|
event_queue_add (device->client->event_queue, CONNECTOR_NAME);
|
||||||
|
|
||||||
connector->name = g_strdup (connector_name);
|
connector->name = g_strdup (connector_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,6 +151,8 @@ handle_connector_description (void *user_data,
|
|||||||
DrmLeaseConnector *connector =
|
DrmLeaseConnector *connector =
|
||||||
drm_lease_connector_lookup (device, drm_lease_connector);
|
drm_lease_connector_lookup (device, drm_lease_connector);
|
||||||
|
|
||||||
|
event_queue_add (device->client->event_queue, CONNECTOR_DESCRIPTION);
|
||||||
|
|
||||||
connector->description = g_strdup (connector_description);
|
connector->description = g_strdup (connector_description);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,6 +165,8 @@ handle_connector_connector_id (void *user_data,
|
|||||||
DrmLeaseConnector *connector =
|
DrmLeaseConnector *connector =
|
||||||
drm_lease_connector_lookup (device, drm_lease_connector);
|
drm_lease_connector_lookup (device, drm_lease_connector);
|
||||||
|
|
||||||
|
event_queue_add (device->client->event_queue, CONNECTOR_ID);
|
||||||
|
|
||||||
connector->id = connector_id;
|
connector->id = connector_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,6 +178,8 @@ handle_connector_done (void *user_data,
|
|||||||
DrmLeaseConnector *connector =
|
DrmLeaseConnector *connector =
|
||||||
drm_lease_connector_lookup (device, drm_lease_connector);
|
drm_lease_connector_lookup (device, drm_lease_connector);
|
||||||
|
|
||||||
|
event_queue_add (device->client->event_queue, CONNECTOR_DONE);
|
||||||
|
|
||||||
connector->done = TRUE;
|
connector->done = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,6 +189,8 @@ handle_connector_withdrawn (void *user_data,
|
|||||||
{
|
{
|
||||||
DrmLeaseDevice *device = user_data;
|
DrmLeaseDevice *device = user_data;
|
||||||
|
|
||||||
|
event_queue_add (device->client->event_queue, CONNECTOR_WITHDRAWN);
|
||||||
|
|
||||||
wp_drm_lease_connector_v1_destroy (drm_lease_connector);
|
wp_drm_lease_connector_v1_destroy (drm_lease_connector);
|
||||||
g_hash_table_remove (device->connectors, drm_lease_connector);
|
g_hash_table_remove (device->connectors, drm_lease_connector);
|
||||||
}
|
}
|
||||||
@ -202,6 +249,8 @@ handle_device_drm_fd (void *user_data,
|
|||||||
DrmLeaseClient *client = user_data;
|
DrmLeaseClient *client = user_data;
|
||||||
DrmLeaseDevice *device = drm_lease_device_lookup (client, drm_lease_device);
|
DrmLeaseDevice *device = drm_lease_device_lookup (client, drm_lease_device);
|
||||||
|
|
||||||
|
event_queue_add (client->event_queue, DEVICE_DRM_FD);
|
||||||
|
|
||||||
device->fd = drm_lease_device_fd;
|
device->fd = drm_lease_device_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,6 +263,8 @@ handle_device_connector (void *user_data,
|
|||||||
DrmLeaseDevice *device = drm_lease_device_lookup (client, drm_lease_device);
|
DrmLeaseDevice *device = drm_lease_device_lookup (client, drm_lease_device);
|
||||||
DrmLeaseConnector *connector;
|
DrmLeaseConnector *connector;
|
||||||
|
|
||||||
|
event_queue_add (client->event_queue, DEVICE_CONNECTOR);
|
||||||
|
|
||||||
connector = drm_lease_connector_new (device);
|
connector = drm_lease_connector_new (device);
|
||||||
g_hash_table_insert (device->connectors, drm_lease_connector, connector);
|
g_hash_table_insert (device->connectors, drm_lease_connector, connector);
|
||||||
|
|
||||||
@ -229,6 +280,8 @@ handle_device_done (void *user_data,
|
|||||||
DrmLeaseClient *client = user_data;
|
DrmLeaseClient *client = user_data;
|
||||||
DrmLeaseDevice *device = drm_lease_device_lookup (client, drm_lease_device);
|
DrmLeaseDevice *device = drm_lease_device_lookup (client, drm_lease_device);
|
||||||
|
|
||||||
|
event_queue_add (client->event_queue, DEVICE_DONE);
|
||||||
|
|
||||||
device->done = TRUE;
|
device->done = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,6 +291,8 @@ handle_device_released (void *user_data,
|
|||||||
{
|
{
|
||||||
DrmLeaseClient *client = user_data;
|
DrmLeaseClient *client = user_data;
|
||||||
|
|
||||||
|
event_queue_add (client->event_queue, DEVICE_RELEASED);
|
||||||
|
|
||||||
g_hash_table_remove (client->devices, drm_lease_device);
|
g_hash_table_remove (client->devices, drm_lease_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,6 +345,9 @@ drm_lease_client_new (WaylandDisplay *display)
|
|||||||
DrmLeaseClient *client;
|
DrmLeaseClient *client;
|
||||||
struct wl_registry *registry;
|
struct wl_registry *registry;
|
||||||
gboolean client_done = FALSE;
|
gboolean client_done = FALSE;
|
||||||
|
GHashTableIter iter;
|
||||||
|
DrmLeaseDevice *device;
|
||||||
|
int n;
|
||||||
|
|
||||||
client = g_new0 (DrmLeaseClient, 1);
|
client = g_new0 (DrmLeaseClient, 1);
|
||||||
client->display = display;
|
client->display = display;
|
||||||
@ -297,6 +355,7 @@ drm_lease_client_new (WaylandDisplay *display)
|
|||||||
g_hash_table_new_full (NULL, NULL,
|
g_hash_table_new_full (NULL, NULL,
|
||||||
NULL,
|
NULL,
|
||||||
(GDestroyNotify) drm_lease_device_free);
|
(GDestroyNotify) drm_lease_device_free);
|
||||||
|
client->event_queue = g_queue_new ();
|
||||||
|
|
||||||
registry = wl_display_get_registry (display->display);
|
registry = wl_display_get_registry (display->display);
|
||||||
wl_registry_add_listener (registry, ®istry_listener, client);
|
wl_registry_add_listener (registry, ®istry_listener, client);
|
||||||
@ -307,8 +366,6 @@ drm_lease_client_new (WaylandDisplay *display)
|
|||||||
while (!client_done)
|
while (!client_done)
|
||||||
{
|
{
|
||||||
gboolean all_devices_done = TRUE;
|
gboolean all_devices_done = TRUE;
|
||||||
GHashTableIter iter;
|
|
||||||
DrmLeaseDevice *device;
|
|
||||||
|
|
||||||
wayland_display_dispatch (display);
|
wayland_display_dispatch (display);
|
||||||
|
|
||||||
@ -319,12 +376,29 @@ drm_lease_client_new (WaylandDisplay *display)
|
|||||||
client_done = all_devices_done;
|
client_done = all_devices_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, client->devices);
|
||||||
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &device))
|
||||||
|
{
|
||||||
|
event_queue_assert_event (client->event_queue, DEVICE_DRM_FD);
|
||||||
|
for (n = 0; n < g_hash_table_size (device->connectors); n++)
|
||||||
|
{
|
||||||
|
event_queue_assert_event (client->event_queue, DEVICE_CONNECTOR);
|
||||||
|
event_queue_assert_event (client->event_queue, CONNECTOR_NAME);
|
||||||
|
event_queue_assert_event (client->event_queue, CONNECTOR_DESCRIPTION);
|
||||||
|
event_queue_assert_event (client->event_queue, CONNECTOR_ID);
|
||||||
|
event_queue_assert_event (client->event_queue, CONNECTOR_DONE);
|
||||||
|
}
|
||||||
|
event_queue_assert_event (client->event_queue, DEVICE_DONE);
|
||||||
|
}
|
||||||
|
event_queue_assert_empty (client->event_queue);
|
||||||
|
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drm_lease_client_free (DrmLeaseClient *client)
|
drm_lease_client_free (DrmLeaseClient *client)
|
||||||
{
|
{
|
||||||
|
g_queue_free (client->event_queue);
|
||||||
g_clear_pointer (&client->devices, g_hash_table_unref);
|
g_clear_pointer (&client->devices, g_hash_table_unref);
|
||||||
g_clear_pointer (&client, g_free);
|
g_clear_pointer (&client, g_free);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user