From 1247452d19fc6b7fa52902a20314b02439f17b0f Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Thu, 5 Sep 2024 15:06:53 -0700 Subject: [PATCH] gwakeup: Reduce wake-ups to only first item in queue We only need to wake up the other side of the GAsyncQueue if we transition from 0 to 1 item in the queue. Otherwise, we can be certain that the other side has received a wakeup and will eventually flush the queue. Part-of: --- clutter/clutter/clutter-event.c | 7 +++++-- src/backends/native/meta-thread-impl.c | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/clutter/clutter/clutter-event.c b/clutter/clutter/clutter-event.c index bcda1bb7b..8c17cee38 100644 --- a/clutter/clutter/clutter-event.c +++ b/clutter/clutter/clutter-event.c @@ -1000,8 +1000,11 @@ _clutter_event_push (const ClutterEvent *event, event = copy; } - g_async_queue_push (context->events_queue, (gpointer) event); - g_main_context_wakeup (NULL); + g_async_queue_lock (context->events_queue); + g_async_queue_push_unlocked (context->events_queue, (gpointer) event); + if (g_async_queue_length_unlocked (context->events_queue) == 1) + g_main_context_wakeup (NULL); + g_async_queue_unlock (context->events_queue); } /** diff --git a/src/backends/native/meta-thread-impl.c b/src/backends/native/meta-thread-impl.c index d02d49203..c32790f40 100644 --- a/src/backends/native/meta-thread-impl.c +++ b/src/backends/native/meta-thread-impl.c @@ -599,8 +599,11 @@ meta_thread_impl_queue_task (MetaThreadImpl *thread_impl, MetaThreadImplPrivate *priv = meta_thread_impl_get_instance_private (thread_impl); - g_async_queue_push (priv->task_queue, task); - g_main_context_wakeup (priv->thread_context); + g_async_queue_lock (priv->task_queue); + g_async_queue_push_unlocked (priv->task_queue, task); + if (g_async_queue_length_unlocked (priv->task_queue) == 1) + g_main_context_wakeup (priv->thread_context); + g_async_queue_unlock (priv->task_queue); } gboolean