Bug 1354782 - Re-use pinned tab width to avoid layout flush and invalidation loop in _positionPinnedTabs. r?florian draft
authorDão Gottwald <dao@mozilla.com>
Sat, 08 Apr 2017 09:17:03 +0200
changeset 558842 47c85909364f128d41780351adfa4f36b39381f8
parent 557688 10ea10d9993c9701e5525928257a589dea2c05d8
child 623281 14ce482fa6ab72639c84390c264c8dfd8005ef15
push id52968
push userdgottwald@mozilla.com
push dateSat, 08 Apr 2017 07:17:49 +0000
reviewersflorian
bugs1354782
milestone55.0a1
Bug 1354782 - Re-use pinned tab width to avoid layout flush and invalidation loop in _positionPinnedTabs. r?florian MozReview-Commit-ID: 98eGdDUXLm2
browser/base/content/tabbrowser.xml
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -6068,26 +6068,29 @@
           var doPosition = this.getAttribute("overflow") == "true" &&
                            numPinned > 0;
 
           if (doPosition) {
             this.setAttribute("positionpinnedtabs", "true");
 
             let scrollButtonWidth = this.mTabstrip._scrollButtonDown.getBoundingClientRect().width;
             let paddingStart = this.mTabstrip.scrollboxPaddingStart;
+            let pinnedTabWidth;
             let width = 0;
 
             for (let i = numPinned - 1; i >= 0; i--) {
               let tab = this.childNodes[i];
-              width += tab.getBoundingClientRect().width;
+              if (!pinnedTabWidth) {
+                pinnedTabWidth = tab.getBoundingClientRect().width;
+              }
+              width += pinnedTabWidth;
               tab.style.marginInlineStart = -(width + scrollButtonWidth + paddingStart) + "px";
             }
 
             this.style.paddingInlineStart = width + paddingStart + "px";
-
           } else {
             this.removeAttribute("positionpinnedtabs");
 
             for (let i = 0; i < numPinned; i++) {
               let tab = this.childNodes[i];
               tab.style.marginInlineStart = "";
             }