| Index: third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
|
| index 71cd3e2c0ad0d0cc35f8595ea3ea9e767f3473ef..edaa4dda51d3ab2d65ddb07448e7c8cf1698fa71 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
|
| @@ -220,14 +220,29 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerContents(GraphicsCon
|
| // Ensure our lists are up-to-date.
|
| m_paintLayer.stackingNode()->updateLayerListsIfNeeded();
|
|
|
| + bool clipRectsChanged = false;
|
| + LayoutSize subpixelAccumulation = m_paintLayer.compositingState() == PaintsIntoOwnBacking ? m_paintLayer.subpixelAccumulation() : paintingInfoArg.subPixelAccumulation;
|
| + ShouldRespectOverflowClip respectOverflowClip = shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject());
|
| + if (paintFlags & PaintLayerUncachedClipRects) {
|
| + m_paintLayer.setPreviousPaintingClipRects(nullptr);
|
| + } else {
|
| + ClipRects* clipRects = m_paintLayer.clipper().paintingClipRects(paintingInfoArg.rootLayer, respectOverflowClip, subpixelAccumulation);
|
| + if (!m_paintLayer.needsRepaint()) {
|
| + ClipRects* previousClipRects = m_paintLayer.previousPaintingClipRects();
|
| + if (clipRects != previousClipRects && (!clipRects || !previousClipRects || *clipRects != *previousClipRects))
|
| + clipRectsChanged = true;
|
| + }
|
| + m_paintLayer.setPreviousPaintingClipRects(clipRects);
|
| + }
|
| +
|
| Optional<SubsequenceRecorder> subsequenceRecorder;
|
| - if (!paintingInfoArg.disableSubsequenceCache
|
| - && !context->printing()
|
| + if (!context->printing()
|
| && !(paintingInfoArg.globalPaintFlags() & GlobalPaintFlattenCompositingLayers)
|
| - && !(paintFlags & (PaintLayerPaintingReflection | PaintLayerPaintingRootBackgroundOnly | PaintLayerPaintingOverlayScrollbars))
|
| + && !(paintFlags & (PaintLayerPaintingReflection | PaintLayerPaintingRootBackgroundOnly | PaintLayerPaintingOverlayScrollbars | PaintLayerUncachedClipRects))
|
| && m_paintLayer.stackingNode()->isStackingContext()
|
| && PaintLayerStackingNodeIterator(*m_paintLayer.stackingNode(), AllChildren).next()) {
|
| if (!m_paintLayer.needsRepaint()
|
| + && !clipRectsChanged
|
| && paintingInfoArg.scrollOffsetAccumulation == m_paintLayer.previousScrollOffsetAccumulationForPainting()
|
| && SubsequenceRecorder::useCachedSubsequenceIfPossible(*context, m_paintLayer))
|
| return result;
|
| @@ -236,22 +251,9 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerContents(GraphicsCon
|
|
|
| PaintLayerPaintingInfo paintingInfo = paintingInfoArg;
|
|
|
| - // This is a workaround of ancestor clip change issue (crbug.com/533717).
|
| - // TODO(wangxianzhu):
|
| - // - spv1: This disables subsequence cache for all descendants of LayoutView with root-layer-scrolls because
|
| - // LayoutView has overflow clip. Should find another workaround method working with root-layer-scrolls
|
| - // if it ships before slimming paint v2. crbug.com/552030.
|
| - // - spv2: Ensure subsequence cache works with ancestor clip change. crbug.com/536138.
|
| - if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && m_paintLayer.layoutObject()->hasClipOrOverflowClip())
|
| - paintingInfo.disableSubsequenceCache = true;
|
| -
|
| LayoutPoint offsetFromRoot;
|
| m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot);
|
| -
|
| - if (m_paintLayer.compositingState() == PaintsIntoOwnBacking)
|
| - offsetFromRoot.move(m_paintLayer.subpixelAccumulation());
|
| - else
|
| - offsetFromRoot.move(paintingInfo.subPixelAccumulation);
|
| + offsetFromRoot.move(subpixelAccumulation);
|
|
|
| LayoutRect bounds = m_paintLayer.physicalBoundingBox(offsetFromRoot);
|
| if (!paintingInfo.paintDirtyRect.contains(bounds))
|
| @@ -280,14 +282,12 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerContents(GraphicsCon
|
| }
|
|
|
| PaintLayerPaintingInfo localPaintingInfo(paintingInfo);
|
| - if (m_paintLayer.compositingState() == PaintsIntoOwnBacking)
|
| - localPaintingInfo.subPixelAccumulation = m_paintLayer.subpixelAccumulation();
|
| + localPaintingInfo.subPixelAccumulation = subpixelAccumulation;
|
|
|
| PaintLayerFragments layerFragments;
|
| if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) {
|
| // Collect the fragments. This will compute the clip rectangles and paint offsets for each layer fragment.
|
| ClipRectsCacheSlot cacheSlot = (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects;
|
| - ShouldRespectOverflowClip respectOverflowClip = shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject());
|
| if (fragmentPolicy == ForceSingleFragment)
|
| m_paintLayer.appendSingleFragmentIgnoringPagination(layerFragments, localPaintingInfo.rootLayer, localPaintingInfo.paintDirtyRect, cacheSlot, IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation);
|
| else
|
|
|