Bug 1400259 - Add will-change:transform to the panel in order to work around a compositor bug. r?mconley draft
authorMarkus Stange <mstange@themasta.com>
Thu, 02 Nov 2017 15:23:41 -0400
changeset 692222 f35f379963e304c0b47c375f80f37468649ba9b6
parent 690034 cd7217cf05a2332a8fd7b498767a07b2c31ea657
child 693010 c09a196a3a8f73aa4b30d0c9a3bb3c4fd20707de
push id87446
push userbmo:mstange@themasta.com
push dateThu, 02 Nov 2017 19:25:51 +0000
reviewersmconley
bugs1400259
milestone58.0a1
Bug 1400259 - Add will-change:transform to the panel in order to work around a compositor bug. r?mconley The bug has something to do with ContainerLayer nesting changes being mishandled: a new ContainerLayer for the transform is being inserted around the container layer for the opacity, which has an intermediate surface. This change makes the outer ContainerLayer permanent so that the dynamic insertion case is not hit. MozReview-Commit-ID: lETpsr4YJi
browser/base/content/browser.css
toolkit/content/xul.css
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -1167,16 +1167,17 @@ toolbarpaletteitem[place="palette"] > #d
 #BMB_bookmarksPopup[animate="cancel"] {
   -moz-window-transform: none;
 }
 
 %elifndef MOZ_WIDGET_GTK
 
 #BMB_bookmarksPopup:not([animate="false"]) {
   opacity: 0;
+  will-change: transform; /* workaround for bug 1414033 */
   transform: translateY(-70px);
   transition-property: transform, opacity;
   transition-duration: 0.18s, 0.18s;
   transition-timing-function:
     var(--animation-easing-function), ease-out;
 }
 
 #BMB_bookmarksPopup[side="bottom"]:not([animate="false"]) {
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -476,16 +476,17 @@ panel[type="arrow"][side][animate="open"
 panel[type="arrow"][side][animate="cancel"] {
   -moz-window-transform: none;
 }
 
 %elifndef MOZ_WIDGET_GTK
 
 panel[type="arrow"][side]:not([animate="false"]) {
   opacity: 0;
+  will-change: transform; /* workaround for bug 1414033 */
   transform: translateY(-70px);
   transition-property: transform, opacity;
   transition-duration: 0.18s, 0.18s;
   transition-timing-function:
     var(--animation-easing-function), ease-out;
 }
 
 panel[type="arrow"][side="bottom"]:not([animate="false"]) {