Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Unified Diff: third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp

Issue 2238883006: SPv2: Use GeometryMapper to implement PaintLayerClipper. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: none Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 8b06af2b00db6562533cf9dc589dd73e74471493..85bca98c0c3ccb18caa5a95683292be7dcf3e200 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -103,9 +103,7 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayer(
if (m_paintLayer.paintsWithTransparency(paintingInfo.getGlobalPaintFlags()))
paintFlags |= PaintLayerHaveTransparency;
- // Transforms will be applied by property nodes directly for SPv2.
- if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() &&
- m_paintLayer.paintsWithTransform(paintingInfo.getGlobalPaintFlags()) &&
+ if (m_paintLayer.paintsWithTransform(paintingInfo.getGlobalPaintFlags()) &&
chrishtr 2016/10/05 23:28:32 Need to call paintLayerWithTransform even for SPv2
!(paintFlags & PaintLayerAppliedTransform))
return paintLayerWithTransform(context, paintingInfo, paintFlags);
@@ -194,15 +192,18 @@ static bool shouldRepaintSubsequence(
needsRepaint = true;
// Repaint if layer's clip changes.
- ClipRects& clipRects = paintLayer.clipper().paintingClipRects(
- paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation);
- ClipRects* previousClipRects = paintLayer.previousPaintingClipRects();
- if (&clipRects != previousClipRects &&
- (!previousClipRects || clipRects != *previousClipRects)) {
- needsRepaint = true;
- shouldClearEmptyPaintPhaseFlags = true;
+ // TODO(chrishtr): implement detecting clipping changes in SPv2. crbug.com/645667
+ if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
+ ClipRects& clipRects = paintLayer.clipper().paintingClipRects(
+ paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation);
+ ClipRects* previousClipRects = paintLayer.previousPaintingClipRects();
+ if (&clipRects != previousClipRects &&
+ (!previousClipRects || clipRects != *previousClipRects)) {
+ needsRepaint = true;
+ shouldClearEmptyPaintPhaseFlags = true;
+ }
+ paintLayer.setPreviousPaintingClipRects(clipRects);
}
- paintLayer.setPreviousPaintingClipRects(clipRects);
// Repaint if previously the layer might be clipped by paintDirtyRect and
// paintDirtyRect changes.
@@ -396,18 +397,6 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerContents(
respectOverflowClip, &offsetFromRoot,
localPaintingInfo.subPixelAccumulation);
- // TODO(trchen): Needs to adjust cull rect between transform spaces.
- // https://crbug.com/593596
- // Disables layer culling for SPv2 for now because the space of the cull
- // rect doesn't match the space we paint in. Clipping will still be done by
- // clip nodes, so this won't cause rendering issues, only performance.
- if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
- layerFragments[0].backgroundRect =
- LayoutRect(LayoutRect::infiniteIntRect());
- layerFragments[0].foregroundRect =
- LayoutRect(LayoutRect::infiniteIntRect());
- }
-
if (shouldPaintContent) {
// TODO(wangxianzhu): This is for old slow scrolling. Implement similar
// optimization for slimming paint v2.
@@ -564,9 +553,6 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform(
GraphicsContext& context,
const PaintLayerPaintingInfo& paintingInfo,
PaintLayerFlags paintFlags) {
- // Transforms will be applied by property nodes directly for SPv2.
- ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
-
TransformationMatrix layerTransform =
m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags());
// If the transform can't be inverted, then don't paint anything.
@@ -578,21 +564,6 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform(
// its parent.
PaintLayer* parentLayer = m_paintLayer.parent();
- ClipRect ancestorBackgroundClipRect;
- if (parentLayer) {
- // Calculate the clip rectangle that the ancestors establish.
- ClipRectsContext clipRectsContext(paintingInfo.rootLayer,
- (paintFlags & PaintLayerUncachedClipRects)
- ? UncachedClipRects
- : PaintingClipRects,
- IgnoreOverlayScrollbarSize);
- if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) ==
- IgnoreOverflowClip)
- clipRectsContext.setIgnoreOverflowClip();
- ancestorBackgroundClipRect =
- m_paintLayer.clipper().backgroundClipRect(clipRectsContext);
- }
-
LayoutObject* object = m_paintLayer.layoutObject();
LayoutView* view = object->view();
bool isFixedPosObjectInPagedMedia =
@@ -650,10 +621,27 @@ PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform(
if (fragments.size() > 1)
cacheSkipper.emplace(context);
+ ClipRect ancestorBackgroundClipRect;
+ if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
+ if (parentLayer) {
+ // Calculate the clip rectangle that the ancestors establish.
+ ClipRectsContext clipRectsContext(
+ paintingInfo.rootLayer,
+ (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects
+ : PaintingClipRects,
+ IgnoreOverlayScrollbarSize);
+ if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) ==
+ IgnoreOverflowClip)
+ clipRectsContext.setIgnoreOverflowClip();
+ ancestorBackgroundClipRect =
+ m_paintLayer.clipper().backgroundClipRect(clipRectsContext);
+ }
+ }
+
PaintResult result = FullyPainted;
for (const auto& fragment : fragments) {
Optional<LayerClipRecorder> clipRecorder;
- if (parentLayer) {
+ if (parentLayer && !RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
ClipRect clipRectForFragment(ancestorBackgroundClipRect);
// A fixed-position object is repeated on every page, but if it is clipped
// by an ancestor layer then the repetitions are clipped out.
@@ -690,9 +678,6 @@ PaintLayerPainter::paintFragmentByApplyingTransform(
const PaintLayerPaintingInfo& paintingInfo,
PaintLayerFlags paintFlags,
const LayoutPoint& fragmentTranslation) {
- // Transforms will be applied by property nodes directly for SPv2.
- ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
-
// This involves subtracting out the position of the layer in our current
// coordinate space, but preserving the accumulated error for sub-pixel
// layout.
@@ -712,7 +697,6 @@ PaintLayerPainter::paintFragmentByApplyingTransform(
Transform3DRecorder transform3DRecorder(
context, *m_paintLayer.layoutObject(),
DisplayItem::kTransform3DElementTransform, transform, transformOrigin);
-
// Now do a paint with the root layer shifted to be us.
PaintLayerPaintingInfo transformedPaintingInfo(
&m_paintLayer, LayoutRect(enclosingIntRect(transform.inverse().mapRect(
@@ -811,11 +795,12 @@ void PaintLayerPainter::paintOverflowControlsForFragments(
LayoutRect cullRect = fragment.backgroundRect.rect();
Optional<LayerClipRecorder> clipRecorder;
- if (needsToClip(localPaintingInfo, fragment.backgroundRect))
+ if (needsToClip(localPaintingInfo, fragment.backgroundRect)) {
clipRecorder.emplace(context, *m_paintLayer.layoutObject(),
DisplayItem::kClipLayerOverflowControls,
fragment.backgroundRect, &localPaintingInfo,
fragment.paginationOffset, paintFlags);
+ }
Optional<ScrollRecorder> scrollRecorder;
if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() &&
@@ -878,6 +863,7 @@ void PaintLayerPainter::paintFragmentWithPhase(
objectPaintProperties->localBorderBoxProperties());
paintOffset +=
toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset);
+ newCullRect.move(paintingInfo.scrollOffsetAccumulation);
} else {
paintOffset += toSize(fragment.layerBounds.location());
if (!paintingInfo.scrollOffsetAccumulation.isZero()) {
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp ('k') | third_party/WebKit/Source/core/testing/Internals.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698