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 d7d7cdb1ae7e1d8fa87a293786686914c7cb5244..a9aaa381dcaa511e54ed9ac049395b7972004827 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp |
+++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp |
@@ -36,8 +36,8 @@ static inline bool shouldSuppressPaintingLayer(const PaintLayer& layer) { |
// invalidate all painted output via a call to |
// LayoutView::invalidatePaintForViewAndCompositedLayers(). We also avoid |
// caching subsequences in this mode; see shouldCreateSubsequence(). |
- if (layer.layoutObject()->document().didLayoutWithPendingStylesheets() && |
- !layer.isRootLayer() && !layer.layoutObject()->isDocumentElement()) |
+ if (layer.layoutObject().document().didLayoutWithPendingStylesheets() && |
+ !layer.isRootLayer() && !layer.layoutObject().isDocumentElement()) |
return true; |
return false; |
@@ -56,17 +56,17 @@ void PaintLayerPainter::paint(GraphicsContext& context, |
static ShouldRespectOverflowClipType shouldRespectOverflowClip( |
PaintLayerFlags paintFlags, |
- const LayoutObject* layoutObject) { |
+ const LayoutObject& layoutObject) { |
return (paintFlags & PaintLayerPaintingOverflowContents || |
(paintFlags & PaintLayerPaintingChildClippingMaskPhase && |
- layoutObject->hasClipPath())) |
+ layoutObject.hasClipPath())) |
? IgnoreOverflowClip |
: RespectOverflowClip; |
} |
bool PaintLayerPainter::paintedOutputInvisible( |
const PaintLayerPaintingInfo& paintingInfo) { |
- const LayoutObject& layoutObject = *m_paintLayer.layoutObject(); |
+ const LayoutObject& layoutObject = m_paintLayer.layoutObject(); |
if (layoutObject.hasBackdropFilter()) |
return false; |
@@ -123,8 +123,8 @@ PaintResult PaintLayerPainter::paint(GraphicsContext& context, |
if (shouldSuppressPaintingLayer(m_paintLayer)) |
return FullyPainted; |
- if (m_paintLayer.layoutObject()->view()->frame() && |
- m_paintLayer.layoutObject()->view()->frame()->shouldThrottleRendering()) |
+ if (m_paintLayer.layoutObject().view()->frame() && |
+ m_paintLayer.layoutObject().view()->frame()->shouldThrottleRendering()) |
return FullyPainted; |
// If this layer is totally invisible then there is nothing to paint. |
@@ -184,7 +184,7 @@ static bool shouldCreateSubsequence(const PaintLayer& paintLayer, |
// Create subsequence for only stacking contexts whose painting are atomic. |
// SVG is also painted atomically. |
if (!paintLayer.stackingNode()->isStackingContext() && |
- !paintLayer.layoutObject()->isSVGRoot()) |
+ !paintLayer.layoutObject().isSVGRoot()) |
return false; |
// The layer doesn't have children. Subsequence caching is not worth because |
@@ -192,14 +192,14 @@ static bool shouldCreateSubsequence(const PaintLayer& paintLayer, |
// SVG is also painted atomically. |
if (!PaintLayerStackingNodeIterator(*paintLayer.stackingNode(), AllChildren) |
.next() && |
- !paintLayer.layoutObject()->isSVGRoot()) |
+ !paintLayer.layoutObject().isSVGRoot()) |
return false; |
// When in FOUC-avoidance mode, don't cache any subsequences, to avoid having |
// to invalidate all of them when leaving this mode. There is an early-out in |
// BlockPainter::paintContents that may result in nothing getting painted in |
// this mode, in addition to early-out logic in PaintLayerPainter. |
- if (paintLayer.layoutObject()->document().didLayoutWithPendingStylesheets()) |
+ if (paintLayer.layoutObject().document().didLayoutWithPendingStylesheets()) |
return false; |
return true; |
@@ -269,18 +269,16 @@ PaintResult PaintLayerPainter::paintLayerContents( |
Optional<ScopedPaintChunkProperties> scopedPaintChunkProperties; |
if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
RuntimeEnabledFeatures::rootLayerScrollingEnabled() && |
- m_paintLayer.layoutObject() && |
- m_paintLayer.layoutObject()->isLayoutView()) { |
+ m_paintLayer.layoutObject().isLayoutView()) { |
const auto* objectPaintProperties = |
- m_paintLayer.layoutObject()->paintProperties(); |
+ m_paintLayer.layoutObject().paintProperties(); |
DCHECK(objectPaintProperties && |
objectPaintProperties->localBorderBoxProperties()); |
PaintChunkProperties properties( |
context.getPaintController().currentPaintChunkProperties()); |
properties.propertyTreeState = |
*objectPaintProperties->localBorderBoxProperties(); |
- properties.backfaceHidden = |
- m_paintLayer.layoutObject()->hasHiddenBackface(); |
+ properties.backfaceHidden = m_paintLayer.layoutObject().hasHiddenBackface(); |
scopedPaintChunkProperties.emplace(context.getPaintController(), |
m_paintLayer, properties); |
} |
@@ -308,16 +306,16 @@ PaintResult PaintLayerPainter::paintLayerContents( |
bool shouldPaintSelfOutline = |
isSelfPaintingLayer && !isPaintingOverlayScrollbars && |
(isPaintingCompositedDecoration || !isPaintingScrollingContent) && |
- m_paintLayer.layoutObject()->styleRef().hasOutline(); |
+ m_paintLayer.layoutObject().styleRef().hasOutline(); |
PaintResult result = FullyPainted; |
if (paintFlags & PaintLayerPaintingRootBackgroundOnly && |
- !m_paintLayer.layoutObject()->isLayoutView()) |
+ !m_paintLayer.layoutObject().isLayoutView()) |
return result; |
- if (m_paintLayer.layoutObject()->view()->frame() && |
- m_paintLayer.layoutObject()->view()->frame()->shouldThrottleRendering()) |
+ if (m_paintLayer.layoutObject().view()->frame() && |
+ m_paintLayer.layoutObject().view()->frame()->shouldThrottleRendering()) |
return result; |
// Ensure our lists are up to date. |
@@ -369,7 +367,7 @@ PaintResult PaintLayerPainter::paintLayerContents( |
// composited-scrolling container. It must, however, still be applied to the |
// mask layer, so that the compositor can properly mask the |
// scrolling contents and scrollbars. |
- if (m_paintLayer.layoutObject()->hasClipPath() && |
+ if (m_paintLayer.layoutObject().hasClipPath() && |
(!m_paintLayer.needsCompositedScrolling() || |
(paintFlags & (PaintLayerPaintingChildClippingMaskPhase | |
PaintLayerPaintingAncestorClippingMaskPhase)))) { |
@@ -385,8 +383,8 @@ PaintResult PaintLayerPainter::paintLayerContents( |
else |
referenceBox.moveBy(offsetFromRoot); |
clipPathClipper.emplace( |
- context, *m_paintLayer.layoutObject()->styleRef().clipPath(), |
- *m_paintLayer.layoutObject(), FloatRect(referenceBox), |
+ context, *m_paintLayer.layoutObject().styleRef().clipPath(), |
+ m_paintLayer.layoutObject(), FloatRect(referenceBox), |
FloatPoint(referenceBox.location())); |
} |
@@ -402,11 +400,11 @@ PaintResult PaintLayerPainter::paintLayerContents( |
paintingInfo.rootLayer, paintingInfo.subPixelAccumulation, |
paintingInfo.getGlobalPaintFlags())); |
compositingRecorder.emplace( |
- context, *m_paintLayer.layoutObject(), |
+ context, m_paintLayer.layoutObject(), |
WebCoreCompositeToSkiaComposite( |
CompositeSourceOver, |
- m_paintLayer.layoutObject()->style()->blendMode()), |
- m_paintLayer.layoutObject()->opacity(), &compositingBounds); |
+ m_paintLayer.layoutObject().style()->blendMode()), |
+ m_paintLayer.layoutObject().opacity(), &compositingBounds); |
} |
PaintLayerPaintingInfo localPaintingInfo(paintingInfo); |
@@ -500,18 +498,16 @@ PaintResult PaintLayerPainter::paintLayerContents( |
// the LayoutView's paint properties will already have been applied at |
// the top of this method, in scopedPaintChunkProperties. |
DCHECK(!(RuntimeEnabledFeatures::rootLayerScrollingEnabled() && |
- m_paintLayer.layoutObject() && |
- m_paintLayer.layoutObject()->isLayoutView())); |
+ m_paintLayer.layoutObject().isLayoutView())); |
const auto* objectPaintProperties = |
- m_paintLayer.layoutObject()->paintProperties(); |
+ m_paintLayer.layoutObject().paintProperties(); |
DCHECK(objectPaintProperties && |
objectPaintProperties->localBorderBoxProperties()); |
PaintChunkProperties properties( |
context.getPaintController().currentPaintChunkProperties()); |
properties.propertyTreeState = |
*objectPaintProperties->localBorderBoxProperties(); |
- properties.backfaceHidden = |
- m_paintLayer.layoutObject()->hasHiddenBackface(); |
+ properties.backfaceHidden = m_paintLayer.layoutObject().hasHiddenBackface(); |
contentScopedPaintChunkProperties.emplace(context.getPaintController(), |
m_paintLayer, properties); |
} |
@@ -576,7 +572,7 @@ PaintResult PaintLayerPainter::paintLayerContents( |
bool shouldPaintMask = |
(paintFlags & PaintLayerPaintingCompositingMaskPhase) && |
- shouldPaintContent && m_paintLayer.layoutObject()->hasMask() && |
+ shouldPaintContent && m_paintLayer.layoutObject().hasMask() && |
!selectionOnly; |
bool shouldPaintClippingMask = |
(paintFlags & (PaintLayerPaintingChildClippingMaskPhase | |
@@ -640,10 +636,10 @@ bool PaintLayerPainter::atLeastOneFragmentIntersectsDamageRect( |
} |
inline bool PaintLayerPainter::isFixedPositionObjectInPagedMedia() { |
- LayoutObject* object = m_paintLayer.layoutObject(); |
- LayoutView* view = object->view(); |
- return object->styleRef().position() == EPosition::kFixed && |
- object->container() == view && view->pageLogicalHeight() && |
+ LayoutObject& object = m_paintLayer.layoutObject(); |
+ LayoutView* view = object.view(); |
+ return object.styleRef().position() == EPosition::kFixed && |
+ object.container() == view && view->pageLogicalHeight() && |
// TODO(crbug.com/619094): Figure out the correct behaviour for fixed |
// position objects in paged media with vertical writing modes. |
view->isHorizontalWritingMode(); |
@@ -655,7 +651,7 @@ void PaintLayerPainter::repeatFixedPositionObjectInPages( |
PaintLayerFragments& layerFragments) { |
DCHECK(isFixedPositionObjectInPagedMedia()); |
- LayoutView* view = m_paintLayer.layoutObject()->view(); |
+ LayoutView* view = m_paintLayer.layoutObject().view(); |
unsigned pages = |
ceilf(view->documentRect().height() / view->pageLogicalHeight()); |
@@ -772,7 +768,7 @@ PaintResult PaintLayerPainter::paintLayerWithTransform( |
if (clipRectForFragment.isEmpty()) |
continue; |
if (needsToClip(paintingInfo, clipRectForFragment)) { |
- clipRecorder.emplace(context, *parentLayer->layoutObject(), |
+ clipRecorder.emplace(context, parentLayer->layoutObject(), |
DisplayItem::kClipLayerParent, clipRectForFragment, |
paintingInfo.rootLayer, fragment.paginationOffset, |
paintFlags); |
@@ -808,7 +804,7 @@ PaintResult PaintLayerPainter::paintFragmentByApplyingTransform( |
// matrix with the origin baked in. |
FloatPoint3D transformOrigin; |
Transform3DRecorder transform3DRecorder( |
- context, *m_paintLayer.layoutObject(), |
+ context, m_paintLayer.layoutObject(), |
DisplayItem::kTransform3DElementTransform, transform, transformOrigin); |
// Now do a paint with the root layer shifted to be us. |
@@ -848,7 +844,7 @@ PaintResult PaintLayerPainter::paintChildren( |
IntSize scrollOffsetAccumulationForChildren = |
paintingInfo.scrollOffsetAccumulation; |
- if (m_paintLayer.layoutObject()->hasOverflowClip()) |
+ if (m_paintLayer.layoutObject().hasOverflowClip()) |
scrollOffsetAccumulationForChildren += |
m_paintLayer.layoutBox()->scrolledContentOffset(); |
@@ -868,7 +864,7 @@ PaintResult PaintLayerPainter::paintChildren( |
// to m_paintLayer. |
for (PaintLayer* parentLayer = child->layer()->parent(); |
parentLayer != &m_paintLayer; parentLayer = parentLayer->parent()) { |
- if (parentLayer->layoutObject()->hasOverflowClip()) |
+ if (parentLayer->layoutObject().hasOverflowClip()) |
childPaintingInfo.scrollOffsetAccumulation += |
parentLayer->layoutBox()->scrolledContentOffset(); |
} |
@@ -910,7 +906,7 @@ void PaintLayerPainter::paintOverflowControlsForFragments( |
Optional<LayerClipRecorder> clipRecorder; |
if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { |
- clipRecorder.emplace(context, *m_paintLayer.layoutObject(), |
+ clipRecorder.emplace(context, m_paintLayer.layoutObject(), |
DisplayItem::kClipLayerOverflowControls, |
fragment.backgroundRect, localPaintingInfo.rootLayer, |
fragment.paginationOffset, paintFlags); |
@@ -920,7 +916,7 @@ void PaintLayerPainter::paintOverflowControlsForFragments( |
if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
!localPaintingInfo.scrollOffsetAccumulation.isZero()) { |
cullRect.move(localPaintingInfo.scrollOffsetAccumulation); |
- scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), |
+ scrollRecorder.emplace(context, m_paintLayer.layoutObject(), |
DisplayItem::kScrollOverflowControls, |
localPaintingInfo.scrollOffsetAccumulation); |
} |
@@ -965,7 +961,7 @@ void PaintLayerPainter::paintFragmentWithPhase( |
// TODO(schenney): Nested border-radius clips are not applied to composited |
// children, probably due to an incorrect clipRoot. |
// https://bugs.chromium.org/p/chromium/issues/detail?id=672561 |
- clipRecorder.emplace(context, *m_paintLayer.layoutObject(), clipType, |
+ clipRecorder.emplace(context, m_paintLayer.layoutObject(), clipType, |
clipRect, paintingInfo.rootLayer, |
fragment.paginationOffset, paintFlags, clippingRule); |
} |
@@ -984,10 +980,10 @@ void PaintLayerPainter::paintFragmentWithPhase( |
LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); |
if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
const auto* objectPaintProperties = |
- m_paintLayer.layoutObject()->paintProperties(); |
+ m_paintLayer.layoutObject().paintProperties(); |
DCHECK(objectPaintProperties && |
objectPaintProperties->localBorderBoxProperties()); |
- paintOffset += m_paintLayer.layoutObject()->paintOffset(); |
+ paintOffset += m_paintLayer.layoutObject().paintOffset(); |
newCullRect.move(paintingInfo.scrollOffsetAccumulation); |
} else { |
paintOffset += toSize(fragment.layerBounds.location()); |
@@ -1001,15 +997,15 @@ void PaintLayerPainter::paintFragmentWithPhase( |
paintOffset += paintingInfo.scrollOffsetAccumulation; |
newCullRect.move(paintingInfo.scrollOffsetAccumulation); |
- scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), phase, |
+ scrollRecorder.emplace(context, m_paintLayer.layoutObject(), phase, |
paintingInfo.scrollOffsetAccumulation); |
} |
} |
PaintInfo paintInfo(context, pixelSnappedIntRect(newCullRect), phase, |
paintingInfo.getGlobalPaintFlags(), paintFlags, |
- paintingInfo.rootLayer->layoutObject()); |
+ &paintingInfo.rootLayer->layoutObject()); |
- m_paintLayer.layoutObject()->paint(paintInfo, paintOffset); |
+ m_paintLayer.layoutObject().paint(paintInfo, paintOffset); |
} |
void PaintLayerPainter::paintBackgroundForFragments( |
@@ -1045,11 +1041,10 @@ void PaintLayerPainter::paintForegroundForFragments( |
Optional<LayerClipRecorder> clipRecorder; |
if (shouldClip && |
needsToClip(localPaintingInfo, layerFragments[0].foregroundRect)) { |
- clipRecorder.emplace(context, *m_paintLayer.layoutObject(), |
- DisplayItem::kClipLayerForeground, |
- layerFragments[0].foregroundRect, |
- localPaintingInfo.rootLayer, |
- layerFragments[0].paginationOffset, paintFlags); |
+ clipRecorder.emplace( |
+ context, m_paintLayer.layoutObject(), DisplayItem::kClipLayerForeground, |
+ layerFragments[0].foregroundRect, localPaintingInfo.rootLayer, |
+ layerFragments[0].paginationOffset, paintFlags); |
clipState = HasClipped; |
} |
@@ -1161,7 +1156,7 @@ void PaintLayerPainter::paintMaskForFragments( |
Optional<ScopedPaintChunkProperties> scopedPaintChunkProperties; |
if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
const auto* objectPaintProperties = |
- m_paintLayer.layoutObject()->paintProperties(); |
+ m_paintLayer.layoutObject().paintProperties(); |
DCHECK(objectPaintProperties && objectPaintProperties->mask()); |
PaintChunkProperties properties( |
context.getPaintController().currentPaintChunkProperties()); |
@@ -1208,7 +1203,7 @@ void PaintLayerPainter::paintOverlayScrollbars( |
void PaintLayerPainter::fillMaskingFragment(GraphicsContext& context, |
const ClipRect& clipRect) { |
- const LayoutObject& layoutObject = *m_paintLayer.layoutObject(); |
+ const LayoutObject& layoutObject = m_paintLayer.layoutObject(); |
if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible( |
context, layoutObject, PaintPhaseClippingMask)) |
return; |