Modified: trunk/Source/WebCore/ChangeLog (263561 => 263562)
--- trunk/Source/WebCore/ChangeLog 2020-06-26 16:31:56 UTC (rev 263561)
+++ trunk/Source/WebCore/ChangeLog 2020-06-26 16:38:45 UTC (rev 263562)
@@ -1,3 +1,18 @@
+2020-06-26 Simon Fraser <[email protected]>
+
+ Clean up some PaintBehavior-related code in RenderLayer
+ https://bugs.webkit.org/show_bug.cgi?id=213634
+
+ Reviewed by Sam Weinig.
+
+ Move the computation of paintBehavior into a lambda, and share the flags between
+ normal painting and mask painting.
+
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::paintLayerContents):
+ (WebCore::RenderLayer::calculateClipRects const):
+ * rendering/RenderLayer.h:
+
2020-06-26 Alicia Boya GarcĂa <[email protected]>
[GStreamer] Initialize m_currentState and m_oldState
Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (263561 => 263562)
--- trunk/Source/WebCore/rendering/RenderLayer.cpp 2020-06-26 16:31:56 UTC (rev 263561)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp 2020-06-26 16:38:45 UTC (rev 263562)
@@ -4534,14 +4534,17 @@
return;
auto localPaintFlags = paintFlags - PaintLayerFlag::AppliedTransform;
+
bool haveTransparency = localPaintFlags.contains(PaintLayerFlag::HaveTransparency);
+ bool isPaintingOverlayScrollbars = localPaintFlags.contains(PaintLayerFlag::PaintingOverlayScrollbars);
+ bool isPaintingScrollingContent = localPaintFlags.contains(PaintLayerFlag::PaintingCompositingScrollingPhase);
+ bool isPaintingCompositedForeground = localPaintFlags.contains(PaintLayerFlag::PaintingCompositingForegroundPhase);
+ bool isPaintingCompositedBackground = localPaintFlags.contains(PaintLayerFlag::PaintingCompositingBackgroundPhase);
+ bool isPaintingOverflowContents = localPaintFlags.contains(PaintLayerFlag::PaintingOverflowContents);
+ bool isCollectingEventRegion = localPaintFlags.contains(PaintLayerFlag::CollectingEventRegion);
+
bool isSelfPaintingLayer = this->isSelfPaintingLayer();
- bool isPaintingOverlayScrollbars = paintFlags.contains(PaintLayerFlag::PaintingOverlayScrollbars);
- bool isPaintingScrollingContent = paintFlags.contains(PaintLayerFlag::PaintingCompositingScrollingPhase);
- bool isPaintingCompositedForeground = paintFlags.contains(PaintLayerFlag::PaintingCompositingForegroundPhase);
- bool isPaintingCompositedBackground = paintFlags.contains(PaintLayerFlag::PaintingCompositingBackgroundPhase);
- bool isPaintingOverflowContents = paintFlags.contains(PaintLayerFlag::PaintingOverflowContents);
- bool isCollectingEventRegion = paintFlags.contains(PaintLayerFlag::CollectingEventRegion);
+
// Outline always needs to be painted even if we have no visible content. Also,
// the outline is painted in the background phase during composited scrolling.
// If it were painted in the foreground phase, it would move with the scrolled
@@ -4554,7 +4557,7 @@
|| (!isPaintingScrollingContent && isPaintingCompositedForeground));
bool shouldPaintContent = m_hasVisibleContent && isSelfPaintingLayer && !isPaintingOverlayScrollbars && !isCollectingEventRegion;
- if (localPaintFlags & PaintLayerFlag::PaintingRootBackgroundOnly && !renderer().isRenderView() && !renderer().isDocumentElementRenderer()) {
+ if (localPaintFlags.contains(PaintLayerFlag::PaintingRootBackgroundOnly) && !renderer().isRenderView() && !renderer().isDocumentElementRenderer()) {
// If beginTransparencyLayers was called prior to this, ensure the transparency state is cleaned up before returning.
if (haveTransparency && m_usedTransparency && !m_paintingInsideReflection) {
context.endTransparencyLayer();
@@ -4592,6 +4595,25 @@
LayerFragments layerFragments;
RenderObject* subtreePaintRootForRenderer = nullptr;
+ auto paintBehavior = [&]() {
+ constexpr OptionSet<PaintBehavior> flagsToCopy = { PaintBehavior::FlattenCompositingLayers, PaintBehavior::Snapshotting, PaintBehavior::ExcludeSelection };
+ OptionSet<PaintBehavior> paintBehavior = paintingInfo.paintBehavior & flagsToCopy;
+
+ if (localPaintFlags.contains(PaintLayerFlag::PaintingSkipRootBackground))
+ paintBehavior.add(PaintBehavior::SkipRootBackground);
+ else if (localPaintFlags.contains(PaintLayerFlag::PaintingRootBackgroundOnly))
+ paintBehavior.add(PaintBehavior::RootBackgroundOnly);
+
+ // FIXME: This seems wrong. We should retain the TileFirstPaint flag for all RenderLayers painted into the root tile cache.
+ if ((paintingInfo.paintBehavior & PaintBehavior::TileFirstPaint) && isRenderViewLayer())
+ paintBehavior.add(PaintBehavior::TileFirstPaint);
+
+ if (isPaintingScrollingContent && isPaintingOverflowContents)
+ paintBehavior.add(PaintBehavior::CompositedOverflowScrollContent);
+
+ return paintBehavior;
+ }();
+
{ // Scope for filter-related state changes.
LayerPaintingInfo localPaintingInfo(paintingInfo);
GraphicsContext* filterContext = setupFilters(context, localPaintingInfo, paintFlags, columnAwareOffsetFromRoot, rootRelativeBounds);
@@ -4611,27 +4633,6 @@
if (localPaintingInfo.overlapTestRequests && isSelfPaintingLayer)
performOverlapTests(*localPaintingInfo.overlapTestRequests, localPaintingInfo.rootLayer, this);
- OptionSet<PaintBehavior> paintBehavior = PaintBehavior::Normal;
- if (localPaintFlags & PaintLayerFlag::PaintingSkipRootBackground)
- paintBehavior.add(PaintBehavior::SkipRootBackground);
- else if (localPaintFlags & PaintLayerFlag::PaintingRootBackgroundOnly)
- paintBehavior.add(PaintBehavior::RootBackgroundOnly);
-
- if (paintingInfo.paintBehavior & PaintBehavior::FlattenCompositingLayers)
- paintBehavior.add(PaintBehavior::FlattenCompositingLayers);
-
- if (paintingInfo.paintBehavior & PaintBehavior::Snapshotting)
- paintBehavior.add(PaintBehavior::Snapshotting);
-
- if ((paintingInfo.paintBehavior & PaintBehavior::TileFirstPaint) && isRenderViewLayer())
- paintBehavior.add(PaintBehavior::TileFirstPaint);
-
- if (paintingInfo.paintBehavior & PaintBehavior::ExcludeSelection)
- paintBehavior.add(PaintBehavior::ExcludeSelection);
-
- if (isPaintingScrollingContent && isPaintingOverflowContents)
- paintBehavior.add(PaintBehavior::CompositedOverflowScrollContent);
-
LayoutRect paintDirtyRect = localPaintingInfo.paintDirtyRect;
if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars || isCollectingEventRegion) {
// Collect the fragments. This will compute the clip rectangles and paint offsets for each layer fragment, as well as whether or not the content of each
@@ -4699,19 +4700,6 @@
}
if (shouldPaintContent && !(selectionOnly || selectionAndBackgroundsOnly)) {
- OptionSet<PaintBehavior> paintBehavior = PaintBehavior::Normal;
- if (paintingInfo.paintBehavior & PaintBehavior::FlattenCompositingLayers)
- paintBehavior.add(PaintBehavior::FlattenCompositingLayers);
-
- if (paintingInfo.paintBehavior & PaintBehavior::Snapshotting)
- paintBehavior.add(PaintBehavior::Snapshotting);
-
- if (paintingInfo.paintBehavior & PaintBehavior::TileFirstPaint)
- paintBehavior.add(PaintBehavior::TileFirstPaint);
-
- if (isPaintingScrollingContent && isPaintingOverflowContents)
- paintBehavior.add(PaintBehavior::CompositedOverflowScrollContent);
-
if (shouldPaintMask(paintingInfo.paintBehavior, localPaintFlags)) {
// Paint the mask for the fragments.
paintMaskForFragments(layerFragments, context, paintingInfo, paintBehavior, subtreePaintRootForRenderer);
@@ -7068,6 +7056,29 @@
return ts;
}
+TextStream& operator<<(TextStream& ts, PaintBehavior behavior)
+{
+ switch (behavior) {
+ case PaintBehavior::Normal: ts << "Normal"; break;
+ case PaintBehavior::SelectionOnly: ts << "SelectionOnly"; break;
+ case PaintBehavior::SkipSelectionHighlight: ts << "SkipSelectionHighlight"; break;
+ case PaintBehavior::ForceBlackText: ts << "ForceBlackText"; break;
+ case PaintBehavior::ForceWhiteText: ts << "ForceWhiteText"; break;
+ case PaintBehavior::RenderingSVGMask: ts << "RenderingSVGMask"; break;
+ case PaintBehavior::SkipRootBackground: ts << "SkipRootBackground"; break;
+ case PaintBehavior::RootBackgroundOnly: ts << "RootBackgroundOnly"; break;
+ case PaintBehavior::SelectionAndBackgroundsOnly: ts << "SelectionAndBackgroundsOnly"; break;
+ case PaintBehavior::ExcludeSelection: ts << "ExcludeSelection"; break;
+ case PaintBehavior::FlattenCompositingLayers: ts << "FlattenCompositingLayers"; break;
+ case PaintBehavior::Snapshotting: ts << "Snapshotting"; break;
+ case PaintBehavior::TileFirstPaint: ts << "TileFirstPaint"; break;
+ case PaintBehavior::CompositedOverflowScrollContent: ts << "CompositedOverflowScrollContent"; break;
+ case PaintBehavior::AnnotateLinks: ts << "AnnotateLinks"; break;
+ }
+
+ return ts;
+}
+
} // namespace WebCore
#if ENABLE(TREE_DEBUGGING)
Modified: trunk/Source/WebCore/rendering/RenderLayer.h (263561 => 263562)
--- trunk/Source/WebCore/rendering/RenderLayer.h 2020-06-26 16:31:56 UTC (rev 263561)
+++ trunk/Source/WebCore/rendering/RenderLayer.h 2020-06-26 16:38:45 UTC (rev 263562)
@@ -1431,6 +1431,7 @@
WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayer&);
WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayer::ClipRectsContext&);
WTF::TextStream& operator<<(WTF::TextStream&, IndirectCompositingReason);
+WTF::TextStream& operator<<(WTF::TextStream&, PaintBehavior);
} // namespace WebCore