[gnome-shell/gbsneto/looking-glass-window-created: 8/8] lookingGlass: Only update window list when visible



commit 43b4f2c7d5f975ca6589970f284f5eb7d4ed45db
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Sep 12 15:45:04 2019 -0300

    lookingGlass: Only update window list when visible
    
    Updating the window list in the Looking Glass is a costly
    operation: it destroys a whole lot of actors, and recreates
    them. This triggers CSS changes, repaints, and allocations.
    
    It is specially bad when paired with Wayland's big number
    of window creations and deletions when showing Builder's
    and Epiphany's popup window.
    
    Only update the window list in the Looking Glass when it is
    visible.
    
    Related: https://gitlab.gnome.org/GNOME/mutter/issues/556
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/719

 js/ui/lookingGlass.js | 13 +++++++++++++
 1 file changed, 13 insertions(+)
---
diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js
index 9f692f4aa7..0317973e88 100644
--- a/js/ui/lookingGlass.js
+++ b/js/ui/lookingGlass.js
@@ -304,6 +304,9 @@ var WindowList = class WindowList {
     }
 
     _updateWindowList() {
+        if (!this._lookingGlass.isOpen)
+            return;
+
         this.actor.destroy_all_children();
         let windows = global.get_window_actors();
         let tracker = Shell.WindowTracker.get_default();
@@ -335,6 +338,10 @@ var WindowList = class WindowList {
             }
         }
     }
+
+    update() {
+        this._updateWindowList();
+    }
 };
 Signals.addSignalMethods(WindowList.prototype);
 
@@ -1099,6 +1106,8 @@ var LookingGlass = class LookingGlass {
             duration,
             mode: Clutter.AnimationMode.EASE_OUT_QUAD
         });
+
+        this._windowList.update();
     }
 
     close() {
@@ -1124,5 +1133,9 @@ var LookingGlass = class LookingGlass {
             onComplete: () => this.actor.hide()
         });
     }
+
+    get isOpen() {
+        return this._open;
+    }
 };
 Signals.addSignalMethods(LookingGlass.prototype);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]