| Index: Source/core/frame/FrameView.cpp
|
| diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp
|
| index 8ec58d08914a74881c9cdea69332274fb6a15fda..7c6495c340428de108d1abfe318973af9a79fed6 100644
|
| --- a/Source/core/frame/FrameView.cpp
|
| +++ b/Source/core/frame/FrameView.cpp
|
| @@ -999,9 +999,6 @@ void FrameView::layout(bool allowSubtree)
|
| return;
|
|
|
| if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) {
|
| - if (m_doFullRepaint)
|
| - renderView()->setShouldDoFullRepaintAfterLayout(true);
|
| -
|
| repaintTree(rootForThisLayout);
|
|
|
| } else if (m_doFullRepaint) {
|
| @@ -1044,10 +1041,23 @@ void FrameView::repaintTree(RenderObject* root)
|
| // Until those states are fully fledged, I'll just disable the ASSERTS.
|
| DisableCompositingQueryAsserts disabler;
|
|
|
| - for (RenderObject* renderer = root; renderer; renderer = renderer->nextInPreOrder()) {
|
| - const LayoutRect& oldRepaintRect = renderer->oldRepaintRect();
|
| - const LayoutRect& newRepaintRect = renderer->newRepaintRect();
|
| + // If we are set to do a full repaint that means the RenderView will be
|
| + // invalidated. We can then skip issuing of invalidations for the child
|
| + // renderers as they'll be covered by the RenderView.
|
| + if (m_doFullRepaint) {
|
| + RenderView* view = renderView();
|
| + view->repaintAfterLayoutIfNeeded(view->containerForRepaint(), true, view->oldRepaintRect(), &(view->newRepaintRect()));
|
| +
|
| + // Clear the invalidation flags for the root and child renderers.
|
| + for (RenderObject* renderer = root; renderer; renderer = renderer->nextInPreOrder()) {
|
| + renderer->clearRepaintState();
|
| + }
|
| + return;
|
| + }
|
|
|
| + ASSERT(!m_doFullRepaint);
|
| +
|
| + for (RenderObject* renderer = root; renderer; renderer = renderer->nextInPreOrder()) {
|
| if ((renderer->onlyNeededPositionedMovementLayout() && renderer->compositingState() != PaintsIntoOwnBacking)
|
| || (renderer->shouldDoFullRepaintIfSelfPaintingLayer()
|
| && renderer->hasLayer()
|
| @@ -1067,7 +1077,7 @@ void FrameView::repaintTree(RenderObject* root)
|
|
|
| } else {
|
| didFullRepaint = renderer->repaintAfterLayoutIfNeeded(renderer->containerForRepaint(),
|
| - renderer->shouldDoFullRepaintAfterLayout(), oldRepaintRect, &newRepaintRect);
|
| + renderer->shouldDoFullRepaintAfterLayout(), renderer->oldRepaintRect(), &(renderer->newRepaintRect()));
|
| }
|
|
|
| if (!didFullRepaint)
|
|
|