Bug 1728232 - Remove RestoreState. r=miko

Differential Revision: https://phabricator.services.mozilla.com/D124006
This commit is contained in:
Matt Woodrow 2021-09-13 05:01:34 +00:00
parent fcd01e0c90
commit 642579b68a
9 changed files with 18 additions and 83 deletions

View File

@ -76,7 +76,7 @@ class TextDrawTarget : public DrawTarget {
mHasUnsupportedFeatures = false;
mHasShadows = false;
SetPermitSubpixelAA(!aItem->IsSubpixelAADisabled());
SetPermitSubpixelAA(true);
// Compute clip/bounds
auto appUnitsPerDevPixel =

View File

@ -209,9 +209,6 @@ static void PaintTextShadowCallback(gfxContext* aCtx, nsPoint aShadowOffset,
void nsDisplayTextOverflowMarker::Paint(nsDisplayListBuilder* aBuilder,
gfxContext* aCtx) {
DrawTargetAutoDisableSubpixelAntialiasing disable(aCtx->GetDrawTarget(),
IsSubpixelAADisabled());
nscolor foregroundColor =
nsLayoutUtils::GetColor(mFrame, &nsStyleText::mWebkitTextFillColor);

View File

@ -407,7 +407,7 @@ class nsDisplayHeaderFooter final : public nsPaintedDisplayItem {
MOZ_ASSERT(pageFrame, "We should have an nsPageFrame");
#endif
static_cast<nsPageFrame*>(mFrame)->PaintHeaderFooter(
*aCtx, ToReferenceFrame(), IsSubpixelAADisabled());
*aCtx, ToReferenceFrame(), false);
}
NS_DISPLAY_DECL_NAME("HeaderFooter", TYPE_HEADER_FOOTER)

View File

@ -280,13 +280,6 @@ bool RetainedDisplayListBuilder::PreProcessDisplayList(
mBuilder.MarkFrameForDisplayIfVisible(f, mBuilder.RootReferenceFrame());
}
// TODO: This is here because we sometimes reuse the previous display list
// completely. For optimization, we could only restore the state for reused
// display items.
if (item->RestoreState()) {
item->InvalidateItemCacheEntry();
}
// If we're going to keep this linked list and not merge it, then mark the
// item as used and put it back into the list.
if (aKeepLinked) {

View File

@ -2815,11 +2815,6 @@ void nsDisplayItem::SetClipChain(const DisplayItemClipChain* aClipChain,
bool aStore) {
mClipChain = aClipChain;
mClip = DisplayItemClipChain::ClipForASR(aClipChain, mActiveScrolledRoot);
if (aStore) {
mState.mClipChain = mClipChain;
mState.mClip = mClip;
}
}
Maybe<nsRect> nsDisplayItem::GetClipWithRespectToASR(
@ -4767,6 +4762,7 @@ nsDisplayWrapList::nsDisplayWrapList(
mListPtr = &mList;
mListPtr->AppendToTop(aList);
mOriginalClipChain = mClipChain;
nsDisplayWrapList::UpdateBounds(aBuilder);
#ifdef DEBUG
@ -4795,6 +4791,7 @@ nsDisplayWrapList::nsDisplayWrapList(nsDisplayListBuilder* aBuilder,
mListPtr = &mList;
mListPtr->AppendToTop(aItem);
mOriginalClipChain = mClipChain;
nsDisplayWrapList::UpdateBounds(aBuilder);
if (!aFrame || !aFrame->IsTransformed()) {
@ -5848,8 +5845,7 @@ void nsDisplayStickyPosition::SetClipChain(
"with it.");
if (aStore) {
mState.mClipChain = aClipChain;
mState.mClip = mClip;
mOriginalClipChain = aClipChain;
}
}
@ -6389,7 +6385,6 @@ void nsDisplayTransform::SetReferenceFrameToAncestor(
void nsDisplayTransform::Init(nsDisplayListBuilder* aBuilder,
nsDisplayList* aChildren) {
mShouldFlatten = false;
mChildren.AppendToTop(aChildren);
UpdateBounds(aBuilder);
}
@ -7803,9 +7798,6 @@ bool nsDisplayText::CanApplyOpacity(WebRenderLayerManager* aManager,
void nsDisplayText::Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) {
AUTO_PROFILER_LABEL("nsDisplayText::Paint", GRAPHICS);
DrawTargetAutoDisableSubpixelAntialiasing disable(aCtx->GetDrawTarget(),
IsSubpixelAADisabled());
RenderToContext(aCtx, aBuilder);
}

View File

@ -2395,9 +2395,6 @@ class nsDisplayItem : public nsDisplayItemLink {
if (aOther.ForceNotVisible()) {
mItemFlags += ItemFlag::ForceNotVisible;
}
if (aOther.IsSubpixelAADisabled()) {
mItemFlags += ItemFlag::DisableSubpixelAA;
}
if (mFrame->In3DContextAndBackfaceIsHidden()) {
mItemFlags += ItemFlag::BackfaceHidden;
}
@ -2432,24 +2429,6 @@ class nsDisplayItem : public nsDisplayItemLink {
nsDisplayItem() = delete;
nsDisplayItem(const nsDisplayItem&) = delete;
/**
* Roll back side effects carried out by processing the display list.
*
* @return true if the rollback actually modified anything, to help the caller
* decide whether to invalidate cached information about this node.
*/
virtual bool RestoreState() {
if (mClipChain == mState.mClipChain && mClip == mState.mClip &&
!mItemFlags.contains(ItemFlag::DisableSubpixelAA)) {
return false;
}
mClipChain = mState.mClipChain;
mClip = mState.mClip;
mItemFlags -= ItemFlag::DisableSubpixelAA;
return true;
}
/**
* Invalidate cached information that depends on this node's contents, after
* a mutation of those contents.
@ -2854,16 +2833,6 @@ class nsDisplayItem : public nsDisplayItemLink {
return nsRect();
}
/**
* Disable usage of component alpha. Currently only relevant for items that
* have text.
*/
void DisableComponentAlpha() { mItemFlags += ItemFlag::DisableSubpixelAA; }
bool IsSubpixelAADisabled() const {
return mItemFlags.contains(ItemFlag::DisableSubpixelAA);
}
/**
* Check if we can add async animations to the layer for this display item.
*/
@ -2962,7 +2931,6 @@ class nsDisplayItem : public nsDisplayItemLink {
#endif
BackfaceHidden,
Combines3DTransformWithAncestors,
DisableSubpixelAA,
ForceNotVisible,
HasHitTestInfo,
IsGlassItem,
@ -3004,11 +2972,6 @@ class nsDisplayItem : public nsDisplayItemLink {
RefPtr<const DisplayItemClipChain> mClipChain;
const DisplayItemClip* mClip = nullptr;
struct {
RefPtr<const DisplayItemClipChain> mClipChain;
const DisplayItemClip* mClip;
} mState;
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
public:
bool IsMergedItem() const {
@ -4891,6 +4854,7 @@ class nsDisplayWrapList : public nsPaintedDisplayItem {
MOZ_COUNT_CTOR(nsDisplayWrapList);
mBaseBuildingRect = GetBuildingRect();
mListPtr = &mList;
mOriginalClipChain = mClipChain;
}
nsDisplayWrapList() = delete;
@ -4908,6 +4872,7 @@ class nsDisplayWrapList : public nsPaintedDisplayItem {
mMergedFrames(aOther.mMergedFrames.Clone()),
mBounds(aOther.mBounds),
mBaseBuildingRect(aOther.mBaseBuildingRect),
mOriginalClipChain(aOther.mClipChain),
mOverrideZIndex(aOther.mOverrideZIndex),
mHasZIndexOverride(aOther.mHasZIndexOverride),
mClearingClipChain(aOther.mClearingClipChain) {
@ -4939,7 +4904,7 @@ class nsDisplayWrapList : public nsPaintedDisplayItem {
// Clear the clip chain up to the asr, but don't store it, so that we'll
// recover it when we reuse the item.
if (mClearingClipChain) {
const DisplayItemClipChain* clip = mState.mClipChain;
const DisplayItemClipChain* clip = mOriginalClipChain;
while (clip && ActiveScrolledRoot::IsAncestor(GetActiveScrolledRoot(),
clip->mASR)) {
clip = clip->mParent;
@ -4961,6 +4926,15 @@ class nsDisplayWrapList : public nsPaintedDisplayItem {
SetBuildingRect(buildingRect);
}
void SetClipChain(const DisplayItemClipChain* aClipChain,
bool aStore) override {
nsDisplayItem::SetClipChain(aClipChain, aStore);
if (aStore) {
mOriginalClipChain = mClipChain;
}
}
void HitTest(nsDisplayListBuilder* aBuilder, const nsRect& aRect,
HitTestState* aState, nsTArray<nsIFrame*>* aOutFrames) override;
nsRect GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) const override;
@ -5084,6 +5058,7 @@ class nsDisplayWrapList : public nsPaintedDisplayItem {
// Displaylist building rect contributed by this display item itself.
// Our mBuildingRect may include the visible areas of children.
nsRect mBaseBuildingRect;
RefPtr<const DisplayItemClipChain> mOriginalClipChain;
int32_t mOverrideZIndex;
bool mHasZIndexOverride;
bool mClearingClipChain = false;
@ -6231,15 +6206,6 @@ class nsDisplayTransform : public nsPaintedDisplayItem {
NS_DISPLAY_DECL_NAME("nsDisplayTransform", TYPE_TRANSFORM)
bool RestoreState() override {
if (!nsPaintedDisplayItem::RestoreState() && !mShouldFlatten) {
return false;
}
mShouldFlatten = false;
return true;
}
void UpdateBounds(nsDisplayListBuilder* aBuilder) override;
/**
@ -6309,8 +6275,6 @@ class nsDisplayTransform : public nsPaintedDisplayItem {
}
}
bool NeedsGeometryUpdates() const override { return mShouldFlatten; }
const nsIFrame* ReferenceFrameForChildren() const override {
// If we were created using a transform-getter, then we don't
// belong to a transformed frame, and aren't a reference frame
@ -6576,8 +6540,6 @@ class nsDisplayTransform : public nsPaintedDisplayItem {
// parent context unintendedly if the root of the child preserves3d context
// doesn't create a transform item.
bool mIsTransformSeparator : 1;
// True if this nsDisplayTransform should get flattened
bool mShouldFlatten : 1;
// True if we have a transform getter.
bool mHasTransformGetter : 1;
};

View File

@ -2714,9 +2714,6 @@ void DisplaySVGText::HitTest(nsDisplayListBuilder* aBuilder,
}
void DisplaySVGText::Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) {
DrawTargetAutoDisableSubpixelAntialiasing disable(aCtx->GetDrawTarget(),
IsSubpixelAADisabled());
uint32_t appUnitsPerDevPixel = mFrame->PresContext()->AppUnitsPerDevPixel();
// ToReferenceFrame includes our mRect offset, but painting takes

View File

@ -263,9 +263,6 @@ static void PaintTextShadowCallback(gfxContext* aCtx, nsPoint aShadowOffset,
void nsDisplayXULTextBox::Paint(nsDisplayListBuilder* aBuilder,
gfxContext* aCtx) {
DrawTargetAutoDisableSubpixelAntialiasing disable(aCtx->GetDrawTarget(),
IsSubpixelAADisabled());
// Paint the text shadow before doing any foreground stuff
nsRect drawRect =
static_cast<nsTextBoxFrame*>(mFrame)->mTextDrawRect + ToReferenceFrame();

View File

@ -2525,9 +2525,6 @@ class nsDisplayTreeBody final : public nsPaintedDisplayItem {
virtual void Paint(nsDisplayListBuilder* aBuilder,
gfxContext* aCtx) override {
MOZ_ASSERT(aBuilder);
DrawTargetAutoDisableSubpixelAntialiasing disable(aCtx->GetDrawTarget(),
IsSubpixelAADisabled());
ImgDrawResult result = static_cast<nsTreeBodyFrame*>(mFrame)->PaintTreeBody(
*aCtx, GetPaintRect(aBuilder, aCtx), ToReferenceFrame(), aBuilder);