Bug 1465616 - Remove call to AlignFixedAndStickyLayers for RCD-RSF. r=botond draft
authorKashav Madan <kmadan@mozilla.com>
Wed, 04 Jul 2018 15:52:03 -0400
changeset 821571 f2cb1432e20715d8305a2f4faeb48cd11f671f86
parent 821570 4df77b0b4faa7cb361ea7ac78a06a08c6bb5f6dd
child 821572 73d5f85154691af707c4588ad44b8a3597cd2607
child 821683 e1fa98f2ff7dff2e8d5a205baa04e9bfb5931b73
push id117143
push userbmo:kmadan@mozilla.com
push dateMon, 23 Jul 2018 18:22:35 +0000
reviewersbotond
bugs1465616
milestone63.0a1
Bug 1465616 - Remove call to AlignFixedAndStickyLayers for RCD-RSF. r=botond MozReview-Commit-ID: B8HH6mbjTnv
gfx/layers/composite/AsyncCompositionManager.cpp
--- a/gfx/layers/composite/AsyncCompositionManager.cpp
+++ b/gfx/layers/composite/AsyncCompositionManager.cpp
@@ -1063,19 +1063,27 @@ AsyncCompositionManager::ApplyAsyncConte
             // effects apply to fixed and sticky layers. We do this by using
             // GetTransform() as the base transform rather than GetLocalTransform(),
             // which would include those factors.
             LayerToParentLayerMatrix4x4 transformWithoutOverscrollOrOmta =
                 layer->GetTransformTyped()
               * CompleteAsyncTransform(
                   AdjustForClip(asyncTransformWithoutOverscroll, layer));
 
-            AlignFixedAndStickyLayers(layer, layer, metrics.GetScrollId(), oldTransform,
-                                      transformWithoutOverscrollOrOmta, fixedLayerMargins,
-                                      &clipPartsCache);
+            // When applying transformations to the RCD-RSF with zoom-enabled,
+            // avoid re-aligning fixed/sticky layers to make them appear static
+            // relative to the visual viewport.
+            //
+            // This is a partial fix and will require changes to how the async
+            // transform is computed, which will be done in Bug 1465618.
+            if (!metrics.IsRootContent() || !gfxPrefs::APZAllowZooming()) {
+              AlignFixedAndStickyLayers(layer, layer, metrics.GetScrollId(), oldTransform,
+                                        transformWithoutOverscrollOrOmta, fixedLayerMargins,
+                                        &clipPartsCache);
+            }
 
             // Combine the local clip with the ancestor scrollframe clip. This is not
             // included in the async transform above, since the ancestor clip should not
             // move with this APZC.
             if (scrollMetadata.HasScrollClip()) {
               ParentLayerIntRect clip = scrollMetadata.ScrollClip().GetClipRect();
               if (layer->GetParent() && layer->GetParent()->GetTransformIsPerspective()) {
                 // If our parent layer has a perspective transform, we want to apply