Bug 1354782 - Re-use pinned tab width to avoid layout flush and invalidation loop in _positionPinnedTabs. r?florian
MozReview-Commit-ID: 98eGdDUXLm2
--- 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 = "";
}