Bug 1459312 - Add a layer property that indicates async zoom container layers. draft
authorMarkus Stange <mstange@themasta.com>
Fri, 04 May 2018 17:45:09 -0400
changeset 791684 380e0a1e9c34d638f521834b01437104a807b3f8
parent 791683 4616b2529700b206abea2167fe563b32acc770cb
child 791685 0f9267a67d610f524367ae14d6a62f4d79e9bbcd
child 791688 c13c9b812d7a97cfb9562671dfb29e4ee7b45a92
push id108875
push userbmo:mstange@themasta.com
push dateFri, 04 May 2018 22:09:26 +0000
bugs1459312
milestone61.0a1
Bug 1459312 - Add a layer property that indicates async zoom container layers. MozReview-Commit-ID: 6qkFXhRDFs
gfx/layers/LayerAttributes.h
gfx/layers/Layers.cpp
gfx/layers/Layers.h
--- a/gfx/layers/LayerAttributes.h
+++ b/gfx/layers/LayerAttributes.h
@@ -150,16 +150,24 @@ public:
   bool SetIsFixedPosition(bool aFixedPosition) {
     if (mIsFixedPosition == aFixedPosition) {
       return false;
     }
     mIsFixedPosition = aFixedPosition;
     return true;
   }
 
+  bool SetIsAsyncZoomContainer(const Maybe<FrameMetrics::ViewID>& aViewId) {
+    if (mIsAsyncZoomContainerForViewId == aViewId) {
+      return false;
+    }
+    mIsAsyncZoomContainerForViewId = aViewId;
+    return true;
+  }
+
   bool SetScrollbarData(const ScrollbarData& aScrollbarData) {
     if (mScrollbarData == aScrollbarData)
     {
       return false;
     }
     mScrollbarData = aScrollbarData;
     return true;
   }
@@ -276,16 +284,20 @@ public:
   float GetOpacity() const {
     return mOpacity;
   }
 
   bool IsFixedPosition() const {
     return mIsFixedPosition;
   }
 
+  Maybe<FrameMetrics::ViewID> IsAsyncZoomContainer() const {
+    return mIsAsyncZoomContainerForViewId;
+  }
+
   const ScrollbarData& GetScrollbarData() const {
     return mScrollbarData;
   }
 
   gfx::CompositionOp GetMixBlendMode() const {
     return mMixBlendMode;
   }
 
@@ -339,30 +351,32 @@ public:
     return mTransform == aOther.mTransform &&
            mTransformIsPerspective == aOther.mTransformIsPerspective &&
            mScrolledClip == aOther.mScrolledClip &&
            mPostXScale == aOther.mPostXScale &&
            mPostYScale == aOther.mPostYScale &&
            mContentFlags == aOther.mContentFlags &&
            mOpacity == aOther.mOpacity &&
            mIsFixedPosition == aOther.mIsFixedPosition &&
+           mIsAsyncZoomContainerForViewId == aOther.mIsAsyncZoomContainerForViewId &&
            mScrollbarData == aOther.mScrollbarData &&
            mMixBlendMode == aOther.mMixBlendMode &&
            mForceIsolatedGroup == aOther.mForceIsolatedGroup;
   }
 
 private:
   gfx::Matrix4x4 mTransform;
   bool mTransformIsPerspective;
   Maybe<LayerClip> mScrolledClip;
   float mPostXScale;
   float mPostYScale;
   uint32_t mContentFlags;
   float mOpacity;
   bool mIsFixedPosition;
+  Maybe<FrameMetrics::ViewID> mIsAsyncZoomContainerForViewId;
   ScrollbarData mScrollbarData;
   gfx::CompositionOp mMixBlendMode;
   bool mForceIsolatedGroup;
 
   struct FixedPositionData {
     FrameMetrics::ViewID mScrollId;
     LayerPoint mAnchor;
     int32_t mSides;
--- a/gfx/layers/Layers.cpp
+++ b/gfx/layers/Layers.cpp
@@ -1828,16 +1828,19 @@ Layer::PrintInfo(std::stringstream& aStr
     aStream << " [extend3DContext]";
   }
   if (Combines3DTransformWithAncestors()) {
     aStream << " [combines3DTransformWithAncestors]";
   }
   if (Is3DContextLeaf()) {
     aStream << " [is3DContextLeaf]";
   }
+  if (Maybe<FrameMetrics::ViewID> viewId = IsAsyncZoomContainer()) {
+    aStream << nsPrintfCString(" [asyncZoomContainer scrollId=%" PRIu64 "]", *viewId).get();
+  }
   if (IsScrollbarContainer()) {
     aStream << " [scrollbar]";
   }
   if (GetScrollbarData().IsThumb()) {
     if (Maybe<ScrollDirection> thumbDirection = GetScrollbarData().mDirection) {
       if (*thumbDirection == ScrollDirection::eVertical) {
         aStream << nsPrintfCString(" [vscrollbar=%" PRIu64 "]", GetScrollbarData().mTargetViewId).get();
       }
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -1182,16 +1182,24 @@ public:
   void SetIsFixedPosition(bool aFixedPosition)
   {
     if (mSimpleAttrs.SetIsFixedPosition(aFixedPosition)) {
       MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) IsFixedPosition", this));
       MutatedSimple();
     }
   }
 
+  void SetIsAsyncZoomContainer(const Maybe<FrameMetrics::ViewID>& aViewId)
+  {
+    if (mSimpleAttrs.SetIsAsyncZoomContainer(aViewId)) {
+      MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) IsAsyncZoomContainer", this));
+      MutatedSimple();
+    }
+  }
+
   /**
    * CONSTRUCTION PHASE ONLY
    * This flag is true when the transform on the layer is a perspective
    * transform. The compositor treats perspective transforms specially
    * for async scrolling purposes.
    */
   void SetTransformIsPerspective(bool aTransformIsPerspective)
   {
@@ -1315,16 +1323,17 @@ public:
   // Same as GetTransform(), but returns the transform as a strongly-typed
   // matrix. Eventually this will replace GetTransform().
   const CSSTransformMatrix GetTransformTyped() const;
   const gfx::Matrix4x4& GetBaseTransform() const { return mSimpleAttrs.GetTransform(); }
   // Note: these are virtual because ContainerLayerComposite overrides them.
   virtual float GetPostXScale() const { return mSimpleAttrs.GetPostXScale(); }
   virtual float GetPostYScale() const { return mSimpleAttrs.GetPostYScale(); }
   bool GetIsFixedPosition() { return mSimpleAttrs.IsFixedPosition(); }
+  Maybe<FrameMetrics::ViewID> IsAsyncZoomContainer() { return mSimpleAttrs.IsAsyncZoomContainer(); }
   bool GetTransformIsPerspective() const { return mSimpleAttrs.GetTransformIsPerspective(); }
   bool GetIsStickyPosition() { return mSimpleAttrs.IsStickyPosition(); }
   FrameMetrics::ViewID GetFixedPositionScrollContainerId() { return mSimpleAttrs.GetFixedPositionScrollContainerId(); }
   LayerPoint GetFixedPositionAnchor() { return mSimpleAttrs.GetFixedPositionAnchor(); }
   int32_t GetFixedPositionSides() { return mSimpleAttrs.GetFixedPositionSides(); }
   FrameMetrics::ViewID GetStickyScrollContainerId() { return mSimpleAttrs.GetStickyScrollContainerId(); }
   const LayerRectAbsolute& GetStickyScrollRangeOuter() { return mSimpleAttrs.GetStickyScrollRangeOuter(); }
   const LayerRectAbsolute& GetStickyScrollRangeInner() { return mSimpleAttrs.GetStickyScrollRangeInner(); }