[gnome-shell] workspace: avoid GObject overhead while computing the clone layout



commit 02718357da2e626c5278117f8d994e9071d70f12
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Thu May 8 18:13:32 2014 +0200

    workspace: avoid GObject overhead while computing the clone layout
    
    We already have the width and height information cached in JS,
    let's avoid going through gjs-gobject-clutter to retrieve them
    again. As a plus, with normal properties the optimizer should
    be able to generate better code.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=729823

 js/ui/workspace.js |   25 +++++++++++++++++--------
 1 files changed, 17 insertions(+), 8 deletions(-)
---
diff --git a/js/ui/workspace.js b/js/ui/workspace.js
index 943e30b..464c3c2 100644
--- a/js/ui/workspace.js
+++ b/js/ui/workspace.js
@@ -239,6 +239,14 @@ const WindowClone = new Lang.Class({
         return this._boundingBox;
     },
 
+    get width() {
+        return this._boundingBox.width;
+    },
+
+    get height() {
+        return this._boundingBox.height;
+    },
+
     getOriginalPosition: function() {
         return [this._boundingBox.x, this._boundingBox.y];
     },
@@ -257,7 +265,8 @@ const WindowClone = new Lang.Class({
             rect = rect.union(metaWindow.get_outer_rect());
         }, this);
 
-        this._boundingBox = rect;
+        // Convert from a MetaRectangle to a native JS object
+        this._boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };
         this.actor.layout_manager.boundingBox = rect;
     },
 
@@ -832,7 +841,7 @@ const LayoutStrategy = new Lang.Class({
         // thumbnails is much more important to preserve than the width of
         // them, so two windows with equal height, but maybe differering
         // widths line up.
-        let ratio = window.actor.height / this._monitor.height;
+        let ratio = window.height / this._monitor.height;
 
         // The purpose of this manipulation here is to prevent windows
         // from getting too small. For something like a calculator window,
@@ -934,11 +943,11 @@ const LayoutStrategy = new Lang.Class({
                 let window = row.windows[j];
 
                 let s = scale * this._computeWindowScale(window) * row.additionalScale;
-                let cellWidth = window.actor.width * s;
-                let cellHeight = window.actor.height * s;
+                let cellWidth = window.width * s;
+                let cellHeight = window.height * s;
 
                 s = Math.min(s, WINDOW_CLONE_MAXIMUM_SCALE);
-                let cloneWidth = window.actor.width * s;
+                let cloneWidth = window.width * s;
 
                 let cloneX = x + (cellWidth - cloneWidth) / 2;
                 let cloneY = row.y + row.height - cellHeight;
@@ -992,7 +1001,7 @@ const UnalignedLayoutStrategy = new Lang.Class({
         for (let i = 0; i < windows.length; i++) {
             let window = windows[i];
             let s = this._computeWindowScale(window);
-            totalWidth += window.actor.width * s;
+            totalWidth += window.width * s;
         }
 
         let idealRowWidth = totalWidth / numRows;
@@ -1005,8 +1014,8 @@ const UnalignedLayoutStrategy = new Lang.Class({
             for (; windowIdx < windows.length; windowIdx++) {
                 let window = windows[windowIdx];
                 let s = this._computeWindowScale(window);
-                let width = window.actor.width * s;
-                let height = window.actor.height * s;
+                let width = window.width * s;
+                let height = window.height * s;
                 row.fullHeight = Math.max(row.fullHeight, height);
 
                 // either new width is < idealWidth or new width is nearer from idealWidth then oldWidth


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