Ignore:
Timestamp:
May 23, 2022, 5:00:57 PM (3 years ago)
Author:
Alan Bujtas
Message:

RenderObject::containerForRepaint should be able to tell if a full repaint has already been scheduled.
https://bugs.webkit.org/show_bug.cgi?id=240721

Reviewed by Simon Fraser.

This patch is in preparation for reducing redundant repaints when an ancestor layer (between the renderer and the repaint container) has already been scheduled for one.

  • Source/WebCore/editing/SelectionGeometryGatherer.cpp:

(WebCore::SelectionGeometryGatherer::addQuad):
(WebCore::SelectionGeometryGatherer::addGapRects):

  • Source/WebCore/editing/SelectionGeometryGatherer.h:
  • Source/WebCore/page/FrameView.cpp:

(WebCore::FrameView::isEnclosedInCompositingLayer const):

  • Source/WebCore/rendering/LayoutRepainter.cpp:

(WebCore::LayoutRepainter::LayoutRepainter):
(WebCore::LayoutRepainter::repaintAfterLayout):

  • Source/WebCore/rendering/LayoutRepainter.h:
  • Source/WebCore/rendering/LegacyLineLayout.cpp:

(WebCore::LegacyLineLayout::layoutRunsAndFloats):

  • Source/WebCore/rendering/RenderElement.cpp:

(WebCore::RenderElement::issueRepaintForOutlineAuto):

  • Source/WebCore/rendering/RenderFragmentedFlow.cpp:

(WebCore::RenderFragmentedFlow::mapLocalToContainer const):

  • Source/WebCore/rendering/RenderFrameSet.cpp:

(WebCore::RenderFrameSet::layout):

  • Source/WebCore/rendering/RenderLayer.cpp:

(WebCore::RenderLayer::recursiveUpdateLayerPositions):
(WebCore::RenderLayer::computeRepaintRectsIncludingDescendants):
(WebCore::RenderLayer::recursiveUpdateLayerPositionsAfterScroll):
(WebCore::RenderLayer::setHasVisibleContent):
(WebCore::RenderLayer::calculateClipRects const):

  • Source/WebCore/rendering/RenderLayer.h:
  • Source/WebCore/rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::repaintOnCompositingChange):

  • Source/WebCore/rendering/RenderLayerModelObject.cpp:

(WebCore::RenderLayerModelObject::styleDidChange):

  • Source/WebCore/rendering/RenderLayerScrollableArea.cpp:

(WebCore::RenderLayerScrollableArea::scrollTo):

  • Source/WebCore/rendering/RenderObject.cpp:

(WebCore::RenderObject::containerForRepaint const):
(WebCore::RenderObject::repaint const):
(WebCore::RenderObject::repaintRectangle const):
(WebCore::RenderObject::repaintSlowRepaintObject const):

  • Source/WebCore/rendering/RenderObject.h:
  • Source/WebCore/rendering/RenderSelectionInfo.cpp:

(WebCore::RenderSelectionInfoBase::RenderSelectionInfoBase):

  • Source/WebCore/rendering/RenderSelectionInfo.h:

(WebCore::RenderSelectionInfoBase::repaintContainer const):

  • Source/WebCore/rendering/RenderView.cpp:

(WebCore::RenderView::repaintRootContents):

Canonical link: https://commits.webkit.org/250898@main

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r294385 r294699  
    858858}
    859859
    860 RenderLayerModelObject* RenderObject::containerForRepaint() const
     860RenderObject::RepaintContainerStatus RenderObject::containerForRepaint() const
    861861{
    862862    RenderLayerModelObject* repaintContainer = nullptr;
     
    873873            RenderLayer* enclosingFilterLayer = parentLayer->enclosingFilterLayer();
    874874            if (enclosingFilterLayer)
    875                 return &enclosingFilterLayer->renderer();
     875                return { false, &enclosingFilterLayer->renderer() };
    876876        }
    877877    }
     
    888888            repaintContainer = parentRenderFragmentedFlow;
    889889    }
    890     return repaintContainer;
     890    return { false, repaintContainer };
    891891}
    892892
     
    972972        return;
    973973
    974     RenderLayerModelObject* repaintContainer = containerForRepaint();
    975     repaintUsingContainer(repaintContainer, clippedOverflowRectForRepaint(repaintContainer));
     974    auto repaintContainer = containerForRepaint();
     975    if (!repaintContainer.fullRepaintIsScheduled)
     976        repaintUsingContainer(repaintContainer.renderer, clippedOverflowRectForRepaint(repaintContainer.renderer));
    976977}
    977978
     
    991992    dirtyRect.move(view.frameView().layoutContext().layoutDelta());
    992993
    993     RenderLayerModelObject* repaintContainer = containerForRepaint();
    994     repaintUsingContainer(repaintContainer, computeRectForRepaint(dirtyRect, repaintContainer), shouldClipToLayer);
     994    auto repaintContainer = containerForRepaint();
     995    if (!repaintContainer.fullRepaintIsScheduled)
     996        repaintUsingContainer(repaintContainer.renderer, computeRectForRepaint(dirtyRect, repaintContainer.renderer), shouldClipToLayer);
    995997}
    996998
     
    10051007        return;
    10061008
    1007     const RenderLayerModelObject* repaintContainer = containerForRepaint();
     1009    auto* repaintContainer = containerForRepaint().renderer;
    10081010
    10091011    bool shouldClipToLayer = true;
Note: See TracChangeset for help on using the changeset viewer.