Bug 1443380 - Don't mark all descendant frames modified for display list building when invalidating a frame subtree since marking just the root is sufficient. r=miko

This commit is contained in:
Matt Woodrow 2018-04-04 16:15:49 +12:00
Родитель 7b723d1d6e
Коммит 8eb6516c62
18 изменённых файлов: 90 добавлений и 76 удалений

Просмотреть файл

@ -450,7 +450,7 @@ nsBlockFrame::GetFrameName(nsAString& aResult) const
#endif
void
nsBlockFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsBlockFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
if (nsSVGUtils::IsInSVGTextSubtree(this)) {
NS_ASSERTION(GetParent()->IsSVGTextFrame(),
@ -458,11 +458,11 @@ nsBlockFrame::InvalidateFrame(uint32_t aDisplayItemKey)
GetParent()->InvalidateFrame();
return;
}
nsContainerFrame::InvalidateFrame(aDisplayItemKey);
nsContainerFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
}
void
nsBlockFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsBlockFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
if (nsSVGUtils::IsInSVGTextSubtree(this)) {
NS_ASSERTION(GetParent()->IsSVGTextFrame(),
@ -470,7 +470,7 @@ nsBlockFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItem
GetParent()->InvalidateFrame();
return;
}
nsContainerFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsContainerFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
}
nscoord

Просмотреть файл

@ -148,8 +148,8 @@ public:
nsIFrame::eBlockFrame));
}
void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
#ifdef DEBUG_FRAME_DUMP
void List(FILE* out = stderr, const char* aPrefix = "", uint32_t aFlags = 0) const override;

Просмотреть файл

@ -7037,13 +7037,15 @@ SchedulePaintInternal(nsIFrame* aDisplayRoot, nsIFrame* aFrame,
}
}
static void InvalidateFrameInternal(nsIFrame *aFrame, bool aHasDisplayItem = true)
static void InvalidateFrameInternal(nsIFrame *aFrame, bool aHasDisplayItem, bool aRebuildDisplayItems)
{
if (aHasDisplayItem) {
aFrame->AddStateBits(NS_FRAME_NEEDS_PAINT);
}
aFrame->MarkNeedsDisplayItemRebuild();
if (aRebuildDisplayItems) {
aFrame->MarkNeedsDisplayItemRebuild();
}
SVGObserverUtils::InvalidateDirectRenderingObservers(aFrame);
bool needsSchedulePaint = false;
if (nsLayoutUtils::IsPopup(aFrame)) {
@ -7083,13 +7085,11 @@ static void InvalidateFrameInternal(nsIFrame *aFrame, bool aHasDisplayItem = tru
}
void
nsIFrame::InvalidateFrameSubtree(uint32_t aDisplayItemKey)
nsIFrame::InvalidateFrameSubtree(bool aRebuildDisplayItems /* = true */)
{
bool hasDisplayItem =
!aDisplayItemKey || FrameLayerBuilder::HasRetainedDataFor(this, aDisplayItemKey);
InvalidateFrame(aDisplayItemKey);
InvalidateFrame(0, aRebuildDisplayItems);
if (HasAnyStateBits(NS_FRAME_ALL_DESCENDANTS_NEED_PAINT) || !hasDisplayItem) {
if (HasAnyStateBits(NS_FRAME_ALL_DESCENDANTS_NEED_PAINT)) {
return;
}
@ -7102,7 +7102,10 @@ nsIFrame::InvalidateFrameSubtree(uint32_t aDisplayItemKey)
for (; !lists.IsDone(); lists.Next()) {
nsFrameList::Enumerator childFrames(lists.CurrentList());
for (; !childFrames.AtEnd(); childFrames.Next()) {
childFrames.get()->InvalidateFrameSubtree();
// Don't explicitly rebuild display items for our descendants,
// since we should be marked and it implicitly includes all
// descendants.
childFrames.get()->InvalidateFrameSubtree(false);
}
}
}
@ -7129,21 +7132,21 @@ nsIFrame::ClearInvalidationStateBits()
}
void
nsIFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsIFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems /* = true */)
{
bool hasDisplayItem =
!aDisplayItemKey || FrameLayerBuilder::HasRetainedDataFor(this, aDisplayItemKey);
InvalidateFrameInternal(this, hasDisplayItem);
InvalidateFrameInternal(this, hasDisplayItem, aRebuildDisplayItems);
}
void
nsIFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsIFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems /* = true */)
{
bool hasDisplayItem =
!aDisplayItemKey || FrameLayerBuilder::HasRetainedDataFor(this, aDisplayItemKey);
bool alreadyInvalid = false;
if (!HasAnyStateBits(NS_FRAME_NEEDS_PAINT)) {
InvalidateFrameInternal(this, hasDisplayItem);
InvalidateFrameInternal(this, hasDisplayItem, aRebuildDisplayItems);
} else {
alreadyInvalid = true;
}

Просмотреть файл

@ -2944,8 +2944,12 @@ public:
* @param aDisplayItemKey If specified, only issues an invalidate
* if this frame painted a display item of that type during the
* previous paint. SVG rendering observers are always notified.
* @param aRebuildDisplayItems If true, then adds this frame to the
* list of modified frames for display list building. Only pass false
* if you're sure that the relevant display items will be rebuilt
* already (possibly by an ancestor being in the modified list).
*/
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0);
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true);
/**
* Same as InvalidateFrame(), but only mark a fixed rect as needing
@ -2956,8 +2960,12 @@ public:
* @param aDisplayItemKey If specified, only issues an invalidate
* if this frame painted a display item of that type during the
* previous paint. SVG rendering observers are always notified.
* @param aRebuildDisplayItems If true, then adds this frame to the
* list of modified frames for display list building. Only pass false
* if you're sure that the relevant display items will be rebuilt
* already (possibly by an ancestor being in the modified list).
*/
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0);
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true);
/**
* Calls InvalidateFrame() on all frames descendant frames (including
@ -2966,11 +2974,12 @@ public:
* This function doesn't walk through placeholder frames to invalidate
* the out-of-flow frames.
*
* @param aDisplayItemKey If specified, only issues an invalidate
* if this frame painted a display item of that type during the
* previous paint. SVG rendering observers are always notified.
* @param aRebuildDisplayItems If true, then adds this frame to the
* list of modified frames for display list building. Only pass false
* if you're sure that the relevant display items will be rebuilt
* already (possibly by an ancestor being in the modified list).
*/
void InvalidateFrameSubtree(uint32_t aDisplayItemKey = 0);
void InvalidateFrameSubtree(bool aRebuildDisplayItems = true);
/**
* Called when a frame is about to be removed and needs to be invalidated.

Просмотреть файл

@ -57,7 +57,7 @@ nsInlineFrame::GetFrameName(nsAString& aResult) const
#endif
void
nsInlineFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsInlineFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
if (nsSVGUtils::IsInSVGTextSubtree(this)) {
nsIFrame* svgTextFrame = nsLayoutUtils::GetClosestFrameOfType(
@ -65,11 +65,11 @@ nsInlineFrame::InvalidateFrame(uint32_t aDisplayItemKey)
svgTextFrame->InvalidateFrame();
return;
}
nsContainerFrame::InvalidateFrame(aDisplayItemKey);
nsContainerFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
}
void
nsInlineFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsInlineFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
if (nsSVGUtils::IsInSVGTextSubtree(this)) {
nsIFrame* svgTextFrame = nsLayoutUtils::GetClosestFrameOfType(
@ -77,7 +77,7 @@ nsInlineFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayIte
svgTextFrame->InvalidateFrame();
return;
}
nsContainerFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsContainerFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
}
static inline bool

Просмотреть файл

@ -50,8 +50,8 @@ public:
~(nsIFrame::eBidiInlineContainer | nsIFrame::eLineParticipant));
}
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual bool IsEmpty() override;
virtual bool IsSelfEmpty() override;

Просмотреть файл

@ -4685,7 +4685,7 @@ nsTextFrame::LastContinuation() const
}
void
nsTextFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsTextFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
if (nsSVGUtils::IsInSVGTextSubtree(this)) {
nsIFrame* svgTextFrame = nsLayoutUtils::GetClosestFrameOfType(
@ -4693,11 +4693,11 @@ nsTextFrame::InvalidateFrame(uint32_t aDisplayItemKey)
svgTextFrame->InvalidateFrame();
return;
}
nsFrame::InvalidateFrame(aDisplayItemKey);
nsFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
}
void
nsTextFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsTextFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
if (nsSVGUtils::IsInSVGTextSubtree(this)) {
nsIFrame* svgTextFrame = nsLayoutUtils::GetClosestFrameOfType(
@ -4705,7 +4705,7 @@ nsTextFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemK
svgTextFrame->InvalidateFrame();
return;
}
nsFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
}
gfxTextRun*

Просмотреть файл

@ -160,9 +160,10 @@ public:
return Style()->ShouldSuppressLineBreak();
}
void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
void InvalidateFrameWithRect(const nsRect& aRect,
uint32_t aDisplayItemKey = 0) override;
uint32_t aDisplayItemKey = 0,
bool aRebuildDisplayItems = true) override;
#ifdef DEBUG_FRAME_DUMP
void List(FILE* out = stderr,

Просмотреть файл

@ -438,21 +438,21 @@ nsDisplayTableCellBackground::GetBounds(nsDisplayListBuilder* aBuilder,
return nsDisplayItem::GetBounds(aBuilder, aSnap);
}
void nsTableCellFrame::InvalidateFrame(uint32_t aDisplayItemKey)
void nsTableCellFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrame(aDisplayItemKey);
nsIFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) {
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey, false);
}
}
void nsTableCellFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
void nsTableCellFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
// If we have filters applied that would affects our bounds, then
// we get an inactive layer created and this is computed
// within FrameLayerBuilder
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey, false);
}
bool

Просмотреть файл

@ -240,8 +240,8 @@ public:
return nsContainerFrame::IsFrameOfType(aFlags & ~(nsIFrame::eTablePart));
}
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameForRemoval() override { InvalidateFrameSubtree(); }
bool ShouldPaintBordersAndBackgrounds() const;

Просмотреть файл

@ -209,22 +209,22 @@ nsTableColFrame::GetSplittableType() const
}
void
nsTableColFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsTableColFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrame(aDisplayItemKey);
nsIFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) {
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey, false);
}
}
void
nsTableColFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsTableColFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
// If we have filters applied that would affects our bounds, then
// we get an inactive layer created and this is computed
// within FrameLayerBuilder
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey, false);
}

Просмотреть файл

@ -277,8 +277,8 @@ public:
return nsSplittableFrame::IsFrameOfType(aFlags & ~(nsIFrame::eTablePart));
}
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameForRemoval() override { InvalidateFrameSubtree(); }
protected:

Просмотреть файл

@ -449,23 +449,24 @@ NS_NewTableColGroupFrame(nsIPresShell* aPresShell, ComputedStyle* aStyle)
NS_IMPL_FRAMEARENA_HELPERS(nsTableColGroupFrame)
void
nsTableColGroupFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsTableColGroupFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrame(aDisplayItemKey);
nsIFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) {
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey, false);
}
}
void
nsTableColGroupFrame::InvalidateFrameWithRect(const nsRect& aRect,
uint32_t aDisplayItemKey)
uint32_t aDisplayItemKey,
bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
// If we have filters applied that would affects our bounds, then
// we get an inactive layer created and this is computed
// within FrameLayerBuilder
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey, false);
}
#ifdef DEBUG_FRAME_DUMP

Просмотреть файл

@ -198,8 +198,8 @@ public:
return nsContainerFrame::IsFrameOfType(aFlags & ~(nsIFrame::eTablePart));
}
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameForRemoval() override { InvalidateFrameSubtree(); }
protected:

Просмотреть файл

@ -1441,22 +1441,22 @@ void nsTableRowFrame::InitHasCellWithStyleBSize(nsTableFrame* aTableFrame)
}
void
nsTableRowFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsTableRowFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrame(aDisplayItemKey);
nsIFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) {
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey, false);
}
}
void
nsTableRowFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsTableRowFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
// If we have filters applied that would affects our bounds, then
// we get an inactive layer created and this is computed
// within FrameLayerBuilder
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey, false);
}
/* ----- global methods ----- */

Просмотреть файл

@ -242,8 +242,8 @@ public:
return nsContainerFrame::IsFrameOfType(aFlags & ~(nsIFrame::eTablePart));
}
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameForRemoval() override { InvalidateFrameSubtree(); }
#ifdef ACCESSIBILITY

Просмотреть файл

@ -1989,20 +1989,20 @@ nsTableRowGroupFrame::FrameCursorData::AppendFrame(nsIFrame* aFrame)
}
void
nsTableRowGroupFrame::InvalidateFrame(uint32_t aDisplayItemKey)
nsTableRowGroupFrame::InvalidateFrame(uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrame(aDisplayItemKey);
nsIFrame::InvalidateFrame(aDisplayItemKey, aRebuildDisplayItems);
if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) {
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey, false);
}
}
void
nsTableRowGroupFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
nsTableRowGroupFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey, bool aRebuildDisplayItems)
{
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey);
nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey, aRebuildDisplayItems);
// If we have filters applied that would affects our bounds, then
// we get an inactive layer created and this is computed
// within FrameLayerBuilder
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey);
GetParent()->InvalidateFrameWithRect(aRect + GetPosition(), aDisplayItemKey, false);
}

Просмотреть файл

@ -328,8 +328,8 @@ public:
return nsContainerFrame::IsFrameOfType(aFlags & ~(nsIFrame::eTablePart));
}
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
virtual void InvalidateFrame(uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0, bool aRebuildDisplayItems = true) override;
virtual void InvalidateFrameForRemoval() override { InvalidateFrameSubtree(); }
protected: