Bug 1454485 - Remove redundant fields from WebRenderLayerScrollData and ensure the ScrollbarData is always correctly populated instead. r?botond
MozReview-Commit-ID: JQ9ooeiEIox
--- a/gfx/layers/wr/WebRenderScrollData.cpp
+++ b/gfx/layers/wr/WebRenderScrollData.cpp
@@ -18,17 +18,16 @@
namespace mozilla {
namespace layers {
WebRenderLayerScrollData::WebRenderLayerScrollData()
: mDescendantCount(-1)
, mTransformIsPerspective(false)
, mEventRegionsOverride(EventRegionsOverride::NoOverride)
, mScrollbarAnimationId(0)
- , mScrollbarTargetContainerId(FrameMetrics::NULL_SCROLL_ID)
, mFixedPosScrollContainerId(FrameMetrics::NULL_SCROLL_ID)
{
}
WebRenderLayerScrollData::~WebRenderLayerScrollData()
{
}
@@ -120,18 +119,16 @@ WebRenderLayerScrollData::Dump(const Web
Stringify(mVisibleRegion).c_str());
printf_stderr(" event regions: %s override: 0x%x\n",
Stringify(mEventRegions).c_str(), mEventRegionsOverride);
if (mReferentId) {
printf_stderr(" ref layers id: 0x%" PRIx64 "\n", uint64_t(*mReferentId));
}
//printf_stderr(" scroll thumb: %s animation: %" PRIu64 "\n",
// Stringify(mScrollThumbData).c_str(), mScrollbarAnimationId);
- printf_stderr(" scroll container: %d target: %" PRIu64 "\n",
- mScrollbarContainerDirection.isSome(), mScrollbarTargetContainerId);
printf_stderr(" fixed pos container: %" PRIu64 "\n",
mFixedPosScrollContainerId);
}
WebRenderScrollData::WebRenderScrollData()
: mManager(nullptr)
, mIsFirstPaint(false)
, mPaintSequenceNumber(0)
--- a/gfx/layers/wr/WebRenderScrollData.h
+++ b/gfx/layers/wr/WebRenderScrollData.h
@@ -76,20 +76,16 @@ public:
const LayerIntRegion& GetVisibleRegion() const { return mVisibleRegion; }
void SetReferentId(LayersId aReferentId) { mReferentId = Some(aReferentId); }
Maybe<LayersId> GetReferentId() const { return mReferentId; }
void SetScrollbarData(const ScrollbarData& aData) { mScrollbarData = aData; }
const ScrollbarData& GetScrollbarData() const { return mScrollbarData; }
void SetScrollbarAnimationId(const uint64_t& aId) { mScrollbarAnimationId = aId; }
const uint64_t& GetScrollbarAnimationId() const { return mScrollbarAnimationId; }
- void SetScrollbarTargetContainerId(FrameMetrics::ViewID aId) { mScrollbarTargetContainerId = aId; }
- FrameMetrics::ViewID GetScrollbarTargetContainerId() const { return mScrollbarTargetContainerId; }
- void SetScrollbarContainerDirection(ScrollDirection aDirection) { mScrollbarContainerDirection = Some(aDirection); }
- Maybe<ScrollDirection> GetScrollbarContainerDirection() const { return mScrollbarContainerDirection; }
void SetFixedPositionScrollContainerId(FrameMetrics::ViewID aId) { mFixedPosScrollContainerId = aId; }
FrameMetrics::ViewID GetFixedPositionScrollContainerId() const { return mFixedPosScrollContainerId; }
void Dump(const WebRenderScrollData& aOwner) const;
friend struct IPC::ParamTraits<WebRenderLayerScrollData>;
@@ -112,18 +108,16 @@ private:
gfx::Matrix4x4 mTransform;
bool mTransformIsPerspective;
EventRegions mEventRegions;
LayerIntRegion mVisibleRegion;
Maybe<LayersId> mReferentId;
EventRegionsOverride mEventRegionsOverride;
ScrollbarData mScrollbarData;
uint64_t mScrollbarAnimationId;
- FrameMetrics::ViewID mScrollbarTargetContainerId;
- Maybe<ScrollDirection> mScrollbarContainerDirection;
FrameMetrics::ViewID mFixedPosScrollContainerId;
};
// Data needed by APZ, for the whole layer tree. One instance of this class
// is created for each transaction sent over PWebRenderBridge. It is populated
// with information from the WebRender layer tree on the client side and the
// information is used by APZ on the parent side.
class WebRenderScrollData
@@ -225,36 +219,32 @@ struct ParamTraits<mozilla::layers::WebR
WriteParam(aMsg, aParam.mTransform);
WriteParam(aMsg, aParam.mTransformIsPerspective);
WriteParam(aMsg, aParam.mEventRegions);
WriteParam(aMsg, aParam.mVisibleRegion);
WriteParam(aMsg, aParam.mReferentId);
WriteParam(aMsg, aParam.mEventRegionsOverride);
WriteParam(aMsg, aParam.mScrollbarData);
WriteParam(aMsg, aParam.mScrollbarAnimationId);
- WriteParam(aMsg, aParam.mScrollbarTargetContainerId);
- WriteParam(aMsg, aParam.mScrollbarContainerDirection);
WriteParam(aMsg, aParam.mFixedPosScrollContainerId);
}
static bool
Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
{
return ReadParam(aMsg, aIter, &aResult->mDescendantCount)
&& ReadParam(aMsg, aIter, &aResult->mScrollIds)
&& ReadParam(aMsg, aIter, &aResult->mTransform)
&& ReadParam(aMsg, aIter, &aResult->mTransformIsPerspective)
&& ReadParam(aMsg, aIter, &aResult->mEventRegions)
&& ReadParam(aMsg, aIter, &aResult->mVisibleRegion)
&& ReadParam(aMsg, aIter, &aResult->mReferentId)
&& ReadParam(aMsg, aIter, &aResult->mEventRegionsOverride)
&& ReadParam(aMsg, aIter, &aResult->mScrollbarData)
&& ReadParam(aMsg, aIter, &aResult->mScrollbarAnimationId)
- && ReadParam(aMsg, aIter, &aResult->mScrollbarTargetContainerId)
- && ReadParam(aMsg, aIter, &aResult->mScrollbarContainerDirection)
&& ReadParam(aMsg, aIter, &aResult->mFixedPosScrollContainerId);
}
};
template<>
struct ParamTraits<mozilla::layers::WebRenderScrollData>
{
typedef mozilla::layers::WebRenderScrollData paramType;
--- a/gfx/layers/wr/WebRenderScrollDataWrapper.h
+++ b/gfx/layers/wr/WebRenderScrollDataWrapper.h
@@ -298,23 +298,26 @@ public:
{
MOZ_ASSERT(IsValid());
return mLayer->GetScrollbarAnimationId();
}
FrameMetrics::ViewID GetScrollbarTargetContainerId() const
{
MOZ_ASSERT(IsValid());
- return mLayer->GetScrollbarTargetContainerId();
+ return mLayer->GetScrollbarData().mTargetViewId;
}
Maybe<ScrollDirection> GetScrollbarContainerDirection() const
{
MOZ_ASSERT(IsValid());
- return mLayer->GetScrollbarContainerDirection();
+ const ScrollbarData& data = mLayer->GetScrollbarData();
+ return (data.mScrollbarLayerType == ScrollbarLayerType::Container)
+ ? data.mDirection
+ : Nothing();
}
FrameMetrics::ViewID GetFixedPositionScrollContainerId() const
{
MOZ_ASSERT(IsValid());
return mLayer->GetFixedPositionScrollContainerId();
}
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -7041,27 +7041,25 @@ nsDisplayOwnLayer::UpdateScrollData(mozi
mozilla::layers::WebRenderLayerScrollData* aLayerData)
{
bool ret = false;
if (IsScrollThumbLayer()) {
ret = true;
if (aLayerData) {
aLayerData->SetScrollbarData(mScrollbarData);
aLayerData->SetScrollbarAnimationId(mWrAnimationId);
- aLayerData->SetScrollbarTargetContainerId(mScrollbarData.mTargetViewId);
- }
- }
- if (mFlags & nsDisplayOwnLayerFlags::eScrollbarContainer) {
+ }
+ } else if (mFlags & nsDisplayOwnLayerFlags::eScrollbarContainer) {
ret = true;
if (aLayerData) {
- ScrollDirection dir = (mFlags & nsDisplayOwnLayerFlags::eVerticalScrollbar)
- ? ScrollDirection::eVertical
- : ScrollDirection::eHorizontal;
- aLayerData->SetScrollbarContainerDirection(dir);
- aLayerData->SetScrollbarTargetContainerId(mScrollbarData.mTargetViewId);
+ mScrollbarData.mScrollbarLayerType = ScrollbarLayerType::Container;
+ mScrollbarData.mDirection = (mFlags & nsDisplayOwnLayerFlags::eVerticalScrollbar)
+ ? Some(ScrollDirection::eVertical)
+ : Some(ScrollDirection::eHorizontal);
+ aLayerData->SetScrollbarData(mScrollbarData);
}
}
return ret;
}
void
nsDisplayOwnLayer::WriteDebugInfo(std::stringstream& aStream)
{