Bug 1443792 - Tighten the equivalence between a layer being scrollable and having an APZC. r?botond draft
authorKartikaya Gupta <kgupta@mozilla.com>
Mon, 12 Mar 2018 16:06:37 -0400
changeset 766385 d60c4cab9b7147cb30dcb407bc4643d03c668c08
parent 766384 39cb2067239aeae49a8e7ac92aeb2b22ca496e1e
child 766386 e03dc28007f0ed78d3bf84fd642d803646c86719
push id102309
push userkgupta@mozilla.com
push dateMon, 12 Mar 2018 20:13:33 +0000
reviewersbotond
bugs1443792
milestone61.0a1
Bug 1443792 - Tighten the equivalence between a layer being scrollable and having an APZC. r?botond If we can assume that a layer being composited has an APZC at index i if and only if the frame metrics at index i is scrollable, then we can do the transformations in the next patch without any change in functionality. MozReview-Commit-ID: FRkvhwdd3nh
gfx/layers/Layers.cpp
gfx/layers/Layers.h
--- a/gfx/layers/Layers.cpp
+++ b/gfx/layers/Layers.cpp
@@ -224,16 +224,18 @@ Layer::StartPendingAnimations(const Time
         }
       });
 }
 
 void
 Layer::SetAsyncPanZoomController(uint32_t aIndex, AsyncPanZoomController *controller)
 {
   MOZ_ASSERT(aIndex < GetScrollMetadataCount());
+  // We should never be setting an APZC on a non-scrollable layer
+  MOZ_ASSERT(!controller || GetFrameMetrics(aIndex).IsScrollable());
   mApzcs[aIndex] = controller;
 }
 
 AsyncPanZoomController*
 Layer::GetAsyncPanZoomController(uint32_t aIndex) const
 {
   MOZ_ASSERT(aIndex < GetScrollMetadataCount());
 #ifdef DEBUG
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -1793,16 +1793,20 @@ public:
    * composited.
    */
   virtual void ClearInvalidRegion() { mInvalidRegion.SetEmpty(); }
 
   // These functions allow attaching an AsyncPanZoomController to this layer,
   // and can be used anytime.
   // A layer has an APZC at index aIndex only-if GetFrameMetrics(aIndex).IsScrollable();
   // attempting to get an APZC for a non-scrollable metrics will return null.
+  // The reverse is also true (that if GetFrameMetrics(aIndex).IsScrollable()
+  // is true, then the layer will have an APZC), although that only holds on
+  // the compositor-side layer tree, and only after the APZ code has had a chance
+  // to rebuild its internal hit-testing tree using the layer tree.
   // The aIndex for these functions must be less than GetScrollMetadataCount().
   void SetAsyncPanZoomController(uint32_t aIndex, AsyncPanZoomController *controller);
   AsyncPanZoomController* GetAsyncPanZoomController(uint32_t aIndex) const;
   // The ScrollMetadataChanged function is used internally to ensure the APZC array length
   // matches the frame metrics array length.
 
   virtual void ClearCachedResources() {}