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 817027 0f78a428db171a50183c0a8cc98ec453d68432b7
parent 817026 f6f94dfc0ecd6500a519bb8cd2db1089d4ea28dd
child 817028 908a1909b70407c5f8d465bd71a2b642ace33954
push id115934
push userbmo:kmadan@mozilla.com
push dateWed, 11 Jul 2018 21:10:29 +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