static bool shouldRepaintSubsequence(PaintLayer& paintLayer, const PaintLayerPaintingInfo& paintingInfo, ShouldRespectOverflowClip respectOverflowClip, const LayoutSize& subpixelAccumulation) { bool needsRepaint = false; // Repaint subsequence if the layer is marked for needing repaint. if (paintLayer.needsRepaint()) needsRepaint = true; // Repaint if layer's clip changes. ClipRects& clipRects = paintLayer.clipper().paintingClipRects(paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation); ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); if (!needsRepaint && &clipRects != previousClipRects && (!previousClipRects || clipRects != *previousClipRects)) needsRepaint = true; paintLayer.setPreviousPaintingClipRects(clipRects); // Repaint if previously the layer might be clipped by paintDirtyRect and paintDirtyRect changes. if (!needsRepaint && paintLayer.previousPaintResult() == PaintLayerPainter::MayBeClippedByPaintDirtyRect && paintLayer.previousPaintDirtyRect() != paintingInfo.paintDirtyRect) needsRepaint = true; paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); // Repaint if scroll offset accumulation changes. if (!needsRepaint && paintingInfo.scrollOffsetAccumulation != paintLayer.previousScrollOffsetAccumulationForPainting()) needsRepaint = true; paintLayer.setPreviousScrollOffsetAccumulationForPainting(paintingInfo.scrollOffsetAccumulation); return needsRepaint; }