[mutter] window: Freeze stack when calculating showing state
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Freeze stack when calculating showing state
- Date: Tue, 1 Dec 2020 12:05:01 +0000 (UTC)
commit d43c8cd8425fe1ab83c1c959a07f99c21f4844c4
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Mon Nov 30 11:03:16 2020 +0100
window: Freeze stack when calculating showing state
Constantly manipulating the stack caused severe stalls (several seconds)
with many open windows when switching workspaces. The cause for this was
that each show/hide call dealt with the stack in isolation, meaning if
you hid N windows, we'd manipulate and synchronize the stack N times,
potentially doing synchronous calls to the X server while doing so.
Avoid the most severe stalls by freezing the stack while calculating
showing; this made the worst case go from several seconds to around
10-20 ms, which is still bad, but by far not as bad.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1616>
src/core/window.c | 5 +++++
1 file changed, 5 insertions(+)
---
diff --git a/src/core/window.c b/src/core/window.c
index 2268d1fd7a..2c9a7fbb5a 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1798,6 +1798,7 @@ stackcmp (gconstpointer a, gconstpointer b)
static gboolean
idle_calc_showing (gpointer data)
{
+ MetaDisplay *display = meta_get_display ();
GSList *tmp;
GSList *copy;
GSList *should_show;
@@ -1868,6 +1869,8 @@ idle_calc_showing (gpointer data)
tmp = tmp->next;
}
+ meta_stack_freeze (display->stack);
+
tmp = should_show;
while (tmp != NULL)
{
@@ -1892,6 +1895,8 @@ idle_calc_showing (gpointer data)
tmp = tmp->next;
}
+ meta_stack_thaw (display->stack);
+
tmp = copy;
while (tmp != NULL)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]