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 821026 d90f7b5dd3f7761d26cdfc4fbfccec864ade33a5
parent 821025 9418aed138d11aaab9ff9fd2105648a536bda125
child 821027 0de750341ae0976719225cf00096a903cab058d4
push id116994
push userbmo:kmadan@mozilla.com
push dateFri, 20 Jul 2018 19:32:49 +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