Bug 1453469 - Remove nsDisplayOwnLayer::mScrollTarget. r=botond

MozReview-Commit-ID: 1LAWH96mm5m

--HG--
extra : rebase_source : fe2bf1d16dc1921057f718cd5f7dd00b11e566c5
extra : amend_source : 53a8a2c0cd03b94002ba0600859e6c18d3a466b6
This commit is contained in:
Daniel Zielas 2018-04-14 09:42:45 +02:00
parent e4878be59c
commit aa51622886
8 changed files with 42 additions and 63 deletions

View File

@ -33,7 +33,8 @@ struct ScrollbarData {
CSSCoord aThumbLength,
bool aThumbIsAsyncDraggable,
CSSCoord aScrollTrackStart,
CSSCoord aScrollTrackLength)
CSSCoord aScrollTrackLength,
uint64_t aTargetViewId)
: mDirection(Some(aDirection))
, mScrollbarLayerType(aScrollbarLayerType)
, mThumbRatio(aThumbRatio)
@ -42,6 +43,7 @@ struct ScrollbarData {
, mThumbIsAsyncDraggable(aThumbIsAsyncDraggable)
, mScrollTrackStart(aScrollTrackStart)
, mScrollTrackLength(aScrollTrackLength)
, mTargetViewId(aTargetViewId)
{}
/**
@ -158,20 +160,6 @@ public:
return true;
}
bool SetScrollbarContainer(FrameMetrics::ViewID aTargetViewId,
ScrollDirection aDirection) {
if (mScrollbarData.mScrollbarLayerType == ScrollbarLayerType::Container &&
mScrollbarData.mDirection &&
*mScrollbarData.mDirection == aDirection &&
mScrollbarData.mTargetViewId == aTargetViewId) {
return false;
}
mScrollbarData.mDirection = Some(aDirection);
mScrollbarData.mTargetViewId = aTargetViewId;
mScrollbarData.mScrollbarLayerType = ScrollbarLayerType::Container;
return true;
}
bool SetMixBlendMode(gfx::CompositionOp aMixBlendMode) {
if (mMixBlendMode == aMixBlendMode) {
return false;

View File

@ -1259,9 +1259,9 @@ public:
/**
* CONSTRUCTION PHASE ONLY
* If a layer is a scroll thumb container layer, set the scroll identifier
* of the scroll frame scrolled by the thumb, and other data related to the
* thumb.
* If a layer is a scroll thumb container layer or a scrollbar container
* layer, set the scroll identifier of the scroll frame scrolled by
* the scrollbar, and other data related to the scrollbar.
*/
void SetScrollbarData(const ScrollbarData& aThumbData)
{
@ -1271,17 +1271,6 @@ public:
}
}
// Set during construction for the container layer of scrollbar components.
// |aScrollId| holds the scroll identifier of the scrollable content that
// the scrollbar is for.
void SetScrollbarContainer(FrameMetrics::ViewID aScrollId,
ScrollDirection aDirection)
{
if (mSimpleAttrs.SetScrollbarContainer(aScrollId, aDirection)) {
MutatedSimple();
}
}
// Used when forwarding transactions. Do not use at any other time.
void SetSimpleAttributes(const SimpleLayerAttributes& aAttrs) {
mSimpleAttrs = aAttrs;

View File

@ -3382,7 +3382,6 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
MakeDisplayItem<nsDisplayOwnLayer>(aBuilder, this, &resultList,
aBuilder->CurrentActiveScrolledRoot(),
nsDisplayOwnLayerFlags::eNone,
mozilla::layers::FrameMetrics::NULL_SCROLL_ID,
ScrollbarData{}, /* aForceActive = */ false));
if (aCreatedContainerItem) {
*aCreatedContainerItem = true;

View File

@ -3042,21 +3042,21 @@ AppendToTop(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists,
nsDisplayWrapList* newItem;
const ActiveScrolledRoot* asr = aBuilder->CurrentActiveScrolledRoot();
if (aFlags & APPEND_OWN_LAYER) {
FrameMetrics::ViewID scrollTarget = FrameMetrics::NULL_SCROLL_ID;
nsDisplayOwnLayerFlags flags = aBuilder->GetCurrentScrollbarFlags();
// The flags here should be at most one scrollbar direction and nothing else
MOZ_ASSERT(flags == nsDisplayOwnLayerFlags::eNone ||
flags == nsDisplayOwnLayerFlags::eVerticalScrollbar ||
flags == nsDisplayOwnLayerFlags::eHorizontalScrollbar);
ScrollbarData scrollbarData;
if (aFlags & APPEND_SCROLLBAR_CONTAINER) {
scrollTarget = aBuilder->GetCurrentScrollbarTarget();
scrollbarData.mTargetViewId = aBuilder->GetCurrentScrollbarTarget();
// The flags here should be exactly one scrollbar direction
MOZ_ASSERT(flags != nsDisplayOwnLayerFlags::eNone);
flags |= nsDisplayOwnLayerFlags::eScrollbarContainer;
}
newItem = MakeDisplayItem<nsDisplayOwnLayer>(aBuilder, aSourceFrame, aSource, asr, flags, scrollTarget);
newItem = MakeDisplayItem<nsDisplayOwnLayer>(aBuilder, aSourceFrame, aSource, asr, flags, scrollbarData);
} else {
newItem = MakeDisplayItem<nsDisplayWrapList>(aBuilder, aSourceFrame, aSource, asr);
}

View File

@ -6922,14 +6922,13 @@ nsDisplayTableBlendContainer::CreateForBackgroundBlendMode(nsDisplayListBuilder*
nsDisplayOwnLayer::nsDisplayOwnLayer(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot,
nsDisplayOwnLayerFlags aFlags, ViewID aScrollTarget,
const ScrollbarData& aThumbData,
nsDisplayOwnLayerFlags aFlags,
const ScrollbarData& aScrollbarData,
bool aForceActive,
bool aClearClipChain)
: nsDisplayWrapList(aBuilder, aFrame, aList, aActiveScrolledRoot, aClearClipChain)
, mFlags(aFlags)
, mScrollTarget(aScrollTarget)
, mThumbData(aThumbData)
, mScrollbarData(aScrollbarData)
, mForceActive(aForceActive)
, mWrAnimationId(0)
{
@ -6965,7 +6964,7 @@ nsDisplayOwnLayer::GetLayerState(nsDisplayListBuilder* aBuilder,
bool
nsDisplayOwnLayer::IsScrollThumbLayer() const
{
return mThumbData.mScrollbarLayerType == layers::ScrollbarLayerType::Thumb;
return mScrollbarData.mScrollbarLayerType == layers::ScrollbarLayerType::Thumb;
}
bool
@ -6986,15 +6985,16 @@ nsDisplayOwnLayer::BuildLayer(nsDisplayListBuilder* aBuilder,
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, &mList,
aContainerParameters, nullptr,
FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR);
if (IsScrollThumbLayer()) {
mThumbData.mTargetViewId = mScrollTarget;
layer->SetScrollbarData(mThumbData);
}
if (mFlags & nsDisplayOwnLayerFlags::eScrollbarContainer) {
ScrollDirection dir = (mFlags & nsDisplayOwnLayerFlags::eVerticalScrollbar)
? ScrollDirection::eVertical
: ScrollDirection::eHorizontal;
layer->SetScrollbarContainer(mScrollTarget, dir);
layer->SetScrollbarData(mScrollbarData);
} else if (mFlags & nsDisplayOwnLayerFlags::eScrollbarContainer) {
mScrollbarData.mScrollbarLayerType = ScrollbarLayerType::Container;
mScrollbarData.mDirection = (mFlags & nsDisplayOwnLayerFlags::eVerticalScrollbar)
? Some(ScrollDirection::eVertical)
: Some(ScrollDirection::eHorizontal);
layer->SetScrollbarData(mScrollbarData);
}
if (mFlags & nsDisplayOwnLayerFlags::eGenerateSubdocInvalidations) {
@ -7044,9 +7044,9 @@ nsDisplayOwnLayer::UpdateScrollData(mozilla::layers::WebRenderScrollData* aData,
if (IsScrollThumbLayer()) {
ret = true;
if (aLayerData) {
aLayerData->SetScrollbarData(mThumbData);
aLayerData->SetScrollbarData(mScrollbarData);
aLayerData->SetScrollbarAnimationId(mWrAnimationId);
aLayerData->SetScrollbarTargetContainerId(mScrollTarget);
aLayerData->SetScrollbarTargetContainerId(mScrollbarData.mTargetViewId);
}
}
if (mFlags & nsDisplayOwnLayerFlags::eScrollbarContainer) {
@ -7056,7 +7056,7 @@ nsDisplayOwnLayer::UpdateScrollData(mozilla::layers::WebRenderScrollData* aData,
? ScrollDirection::eVertical
: ScrollDirection::eHorizontal;
aLayerData->SetScrollbarContainerDirection(dir);
aLayerData->SetScrollbarTargetContainerId(mScrollTarget);
aLayerData->SetScrollbarTargetContainerId(mScrollbarData.mTargetViewId);
}
}
return ret;
@ -7065,7 +7065,7 @@ nsDisplayOwnLayer::UpdateScrollData(mozilla::layers::WebRenderScrollData* aData,
void
nsDisplayOwnLayer::WriteDebugInfo(std::stringstream& aStream)
{
aStream << nsPrintfCString(" (flags 0x%x) (scrolltarget %" PRIu64 ")", (int)mFlags, mScrollTarget).get();
aStream << nsPrintfCString(" (flags 0x%x) (scrolltarget %" PRIu64 ")", (int)mFlags, mScrollbarData.mTargetViewId).get();
}
nsDisplaySubDocument::nsDisplaySubDocument(nsDisplayListBuilder* aBuilder,

View File

@ -5600,18 +5600,18 @@ public:
nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot,
nsDisplayOwnLayerFlags aFlags = nsDisplayOwnLayerFlags::eNone,
ViewID aScrollTarget = mozilla::layers::FrameMetrics::NULL_SCROLL_ID,
const ScrollbarData& aThumbData = ScrollbarData{},
const ScrollbarData& aScrollbarData = ScrollbarData{},
bool aForceActive = true,
bool aClearClipChain = false);
#ifdef NS_BUILD_REFCNT_LOGGING
virtual ~nsDisplayOwnLayer();
#endif
nsDisplayOwnLayer(nsDisplayListBuilder* aBuilder, const nsDisplayOwnLayer& aOther)
: nsDisplayWrapList(aBuilder, aOther)
, mFlags(aOther.mFlags)
, mScrollTarget(aOther.mScrollTarget)
, mThumbData(aOther.mThumbData)
, mScrollbarData(aOther.mScrollbarData)
, mForceActive(aOther.mForceActive)
, mWrAnimationId(aOther.mWrAnimationId)
{
@ -5651,12 +5651,15 @@ public:
NS_DISPLAY_DECL_NAME("OwnLayer", TYPE_OWN_LAYER)
protected:
nsDisplayOwnLayerFlags mFlags;
ViewID mScrollTarget;
// If this nsDisplayOwnLayer represents a scroll thumb layer, mThumbData
// stores information about the scroll thumb. Otherwise, mThumbData will be
// default-constructed (in particular with mDirection == Nothing())
// and can be ignored.
ScrollbarData mThumbData;
/**
* If this nsDisplayOwnLayer represents a scroll thumb layer or a
* scrollbar container layer, mScrollbarData stores information
* about the scrollbar. Otherwise, mScrollbarData will be
* default-constructed (in particular with mDirection == Nothing())
* and can be ignored.
*/
ScrollbarData mScrollbarData;
bool mForceActive;
uint64_t mWrAnimationId;
};

View File

@ -1390,7 +1390,6 @@ nsBoxFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
aLists.Content()->AppendToTop(
MakeDisplayItem<nsDisplayOwnLayer>(aBuilder, this, &masterList, ownLayerASR,
nsDisplayOwnLayerFlags::eNone,
mozilla::layers::FrameMetrics::NULL_SCROLL_ID,
mozilla::layers::ScrollbarData{}, true, true));
}
}

View File

@ -459,7 +459,7 @@ nsSliderFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder,
const ActiveScrolledRoot* ownLayerASR = contASRTracker.GetContainerASR();
aLists.Content()->AppendToTop(
MakeDisplayItem<nsDisplayOwnLayer>(aBuilder, this, &masterList, ownLayerASR,
flags, scrollTargetId,
flags,
ScrollbarData{scrollDirection,
layers::ScrollbarLayerType::Thumb,
GetThumbRatio(),
@ -467,7 +467,8 @@ nsSliderFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder,
thumbLength,
isAsyncDraggable,
sliderTrackStart,
sliderTrackLength}));
sliderTrackLength,
scrollTargetId}));
return;
}