Bug 1459312 - Add a layer property that indicates async zoom container layers.
MozReview-Commit-ID: 6qkFXhRDFs
--- 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(); }