Bug 770058. InvalidateFrame doesn't need flags, we can just avoid calling ScheduleRepaint if we find any ancestor frame with a descendant that needs invalidation. r=mattwoodrow

This commit is contained in:
Robert O'Callahan 2012-08-29 17:48:44 +12:00
parent 2a29a59285
commit 030510fcb8
11 changed files with 28 additions and 34 deletions

View File

@ -4751,9 +4751,9 @@ nsIFrame::GetTransformMatrix(const nsIFrame* aStopAtAncestor,
}
void
nsIFrame::InvalidateFrameSubtree(uint32_t aFlags)
nsIFrame::InvalidateFrameSubtree()
{
InvalidateFrame(aFlags);
InvalidateFrame();
if (HasAnyStateBits(NS_FRAME_ALL_DESCENDANTS_NEED_PAINT)) {
return;
@ -4768,8 +4768,7 @@ nsIFrame::InvalidateFrameSubtree(uint32_t aFlags)
for (; !lists.IsDone(); lists.Next()) {
nsFrameList::Enumerator childFrames(lists.CurrentList());
for (; !childFrames.AtEnd(); childFrames.Next()) {
childFrames.get()->
InvalidateFrameSubtree(aFlags | INVALIDATE_DONT_SCHEDULE_PAINT);
childFrames.get()->InvalidateFrameSubtree();
}
}
}
@ -4796,7 +4795,7 @@ nsIFrame::ClearInvalidationStateBits()
}
void
nsIFrame::InvalidateFrame(uint32_t aFlags)
nsIFrame::InvalidateFrame()
{
AddStateBits(NS_FRAME_NEEDS_PAINT);
nsIFrame *parent = nsLayoutUtils::GetCrossDocParentFrame(this);
@ -4804,7 +4803,7 @@ nsIFrame::InvalidateFrame(uint32_t aFlags)
parent->AddStateBits(NS_FRAME_DESCENDANT_NEEDS_PAINT);
parent = nsLayoutUtils::GetCrossDocParentFrame(parent);
}
if (!(aFlags & INVALIDATE_DONT_SCHEDULE_PAINT)) {
if (!parent) {
SchedulePaint();
}
}
@ -8008,7 +8007,7 @@ nsFrame::SetParent(nsIFrame* aParent)
// ourselves too. This is probably faster than clearing the flag all
// the way up the frame tree.
if (aParent->HasAnyStateBits(NS_FRAME_ALL_DESCENDANTS_NEED_PAINT)) {
InvalidateFrame(INVALIDATE_DONT_SCHEDULE_PAINT);
InvalidateFrame();
}
}

View File

@ -2173,17 +2173,12 @@ public:
/**
* Marks all display items created by this frame as needing a repaint,
* and calls SchedulePaint() if requested.
* and calls SchedulePaint() if requested and one is not already pending.
*
* This includes all display items created by this frame, including
* container types.
* @param aFlags INVALIDATE_DONT_SCHEDULE_PAINT: Don't call SchedulePaint()
* when invalidating.
*/
enum {
INVALIDATE_DONT_SCHEDULE_PAINT
};
virtual void InvalidateFrame(uint32_t aFlags = 0);
virtual void InvalidateFrame();
/**
* Calls InvalidateFrame() on all frames descendant frames (including
@ -2192,7 +2187,7 @@ public:
* This function doesn't walk through placeholder frames to invalidate
* the out-of-flow frames.
*/
void InvalidateFrameSubtree(uint32_t aFlags = 0);
void InvalidateFrameSubtree();
/**
* Checks if a frame has had InvalidateFrame() called on it since the

View File

@ -211,11 +211,11 @@ public:
virtual bool UpdateOverflow();
virtual void InvalidateFrame(uint32_t aFlags = 0)
virtual void InvalidateFrame()
{
nsIFrame::InvalidateFrame(aFlags);
nsIFrame::InvalidateFrame();
nsTableFrame *tableFrame = nsTableFrame::GetTableFrame(this);
tableFrame->InvalidateFrame(aFlags | INVALIDATE_DONT_SCHEDULE_PAINT);
tableFrame->InvalidateFrame();
}
protected:

View File

@ -191,10 +191,10 @@ nsTableColFrame::GetSplittableType() const
}
void
nsTableColFrame::InvalidateFrame(uint32_t aFlags)
nsTableColFrame::InvalidateFrame()
{
nsIFrame::InvalidateFrame(aFlags);
nsIFrame::InvalidateFrame();
nsTableFrame *tableFrame = nsTableFrame::GetTableFrame(this);
tableFrame->InvalidateFrame(aFlags | INVALIDATE_DONT_SCHEDULE_PAINT);
tableFrame->InvalidateFrame();
}

View File

@ -264,7 +264,7 @@ public:
return mFinalWidth;
}
virtual void InvalidateFrame(uint32_t aFlags = 0);
virtual void InvalidateFrame();
protected:

View File

@ -465,11 +465,11 @@ nsTableColGroupFrame::GetType() const
}
void
nsTableColGroupFrame::InvalidateFrame(uint32_t aFlags)
nsTableColGroupFrame::InvalidateFrame()
{
nsIFrame::InvalidateFrame(aFlags);
nsIFrame::InvalidateFrame();
nsTableFrame *tableFrame = nsTableFrame::GetTableFrame(this);
tableFrame->InvalidateFrame(aFlags | INVALIDATE_DONT_SCHEDULE_PAINT);
tableFrame->InvalidateFrame();
}
#ifdef DEBUG

View File

@ -197,7 +197,7 @@ public:
void SetContinuousBCBorderWidth(uint8_t aForSide,
BCPixelSize aPixelValue);
virtual void InvalidateFrame(uint32_t aFlags = 0);
virtual void InvalidateFrame();
protected:
nsTableColGroupFrame(nsStyleContext* aContext);

View File

@ -1352,11 +1352,11 @@ void nsTableRowFrame::InitHasCellWithStyleHeight(nsTableFrame* aTableFrame)
}
void
nsTableRowFrame::InvalidateFrame(uint32_t aFlags)
nsTableRowFrame::InvalidateFrame()
{
nsIFrame::InvalidateFrame(aFlags);
nsIFrame::InvalidateFrame();
nsTableFrame *tableFrame = nsTableFrame::GetTableFrame(this);
tableFrame->InvalidateFrame(aFlags | INVALIDATE_DONT_SCHEDULE_PAINT);
tableFrame->InvalidateFrame();
}
/* ----- global methods ----- */

View File

@ -224,7 +224,7 @@ public:
void SetContinuousBCBorderWidth(uint8_t aForSide,
BCPixelSize aPixelValue);
virtual void InvalidateFrame(uint32_t aFlags = 0);
virtual void InvalidateFrame();
#ifdef ACCESSIBILITY
virtual already_AddRefed<Accessible> CreateAccessible() MOZ_OVERRIDE;

View File

@ -1843,9 +1843,9 @@ nsTableRowGroupFrame::FrameCursorData::AppendFrame(nsIFrame* aFrame)
}
void
nsTableRowGroupFrame::InvalidateFrame(uint32_t aFlags)
nsTableRowGroupFrame::InvalidateFrame()
{
nsIFrame::InvalidateFrame(aFlags);
nsIFrame::InvalidateFrame();
nsTableFrame *tableFrame = nsTableFrame::GetTableFrame(this);
tableFrame->InvalidateFrame(aFlags | INVALIDATE_DONT_SCHEDULE_PAINT);
tableFrame->InvalidateFrame();
}

View File

@ -325,7 +325,7 @@ public:
virtual nsILineIterator* GetLineIterator() { return this; }
virtual void InvalidateFrame(uint32_t aFlags = 0);
virtual void InvalidateFrame();
protected:
nsTableRowGroupFrame(nsStyleContext* aContext);