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

Unified Diff: Source/core/rendering/compositing/CompositedLayerMapping.cpp

Issue 345653002: Issue paint invalidations before and after changing offsetFromRenderer and reconfiguring (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased two tests. Created 6 years, 6 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: Source/core/rendering/compositing/CompositedLayerMapping.cpp
diff --git a/Source/core/rendering/compositing/CompositedLayerMapping.cpp b/Source/core/rendering/compositing/CompositedLayerMapping.cpp
index 383f83a18db464921fdd2105fa80f820b37336b3..824aabd5c5341bccb7d3178e0c53d1e5c2008615 100644
--- a/Source/core/rendering/compositing/CompositedLayerMapping.cpp
+++ b/Source/core/rendering/compositing/CompositedLayerMapping.cpp
@@ -525,7 +525,7 @@ void CompositedLayerMapping::computeBoundsOfOwningLayer(const RenderLayer* compo
}
void CompositedLayerMapping::updateSquashingLayerGeometry(const LayoutPoint& offsetFromCompositedAncestor, const IntPoint& graphicsLayerParentLocation, const RenderLayer& referenceLayer,
- Vector<GraphicsLayerPaintInfo>& layers, GraphicsLayer* squashingLayer, LayoutPoint* offsetFromTransformedAncestor)
+ Vector<GraphicsLayerPaintInfo>& layers, GraphicsLayer* squashingLayer, LayoutPoint* offsetFromTransformedAncestor, Vector<RenderLayer*>& layersNeedingPaintInvalidation)
{
if (!squashingLayer)
return;
@@ -560,12 +560,6 @@ void CompositedLayerMapping::updateSquashingLayerGeometry(const LayoutPoint& off
IntPoint squashLayerOrigin = squashLayerBounds.location();
LayoutSize squashLayerOriginInOwningLayerSpace = squashLayerOrigin - offsetFromReferenceLayerToParentGraphicsLayer;
- squashingLayer->setPosition(squashLayerBounds.location());
- squashingLayer->setSize(squashLayerBounds.size());
-
- *offsetFromTransformedAncestor = referenceOffsetFromTransformedAncestor;
- offsetFromTransformedAncestor->move(squashLayerOriginInOwningLayerSpace);
-
// Now that the squashing bounds are known, we can convert the RenderLayer painting offsets
// from CLM owning layer space to the squashing layer space.
//
@@ -583,8 +577,10 @@ void CompositedLayerMapping::updateSquashingLayerGeometry(const LayoutPoint& off
// It is ok to repaint here, because all of the geometry needed to correctly repaint is computed by this point.
IntSize newOffsetFromRenderer = -IntSize(offsetFromSquashLayerOrigin.width().round(), offsetFromSquashLayerOrigin.height().round());
LayoutSize subpixelAccumulation = offsetFromSquashLayerOrigin + newOffsetFromRenderer;
- if (layers[i].offsetFromRendererSet && layers[i].offsetFromRenderer != newOffsetFromRenderer)
+ if (layers[i].offsetFromRendererSet && layers[i].offsetFromRenderer != newOffsetFromRenderer) {
layers[i].renderLayer->repainter().repaintIncludingNonCompositingDescendants();
+ layersNeedingPaintInvalidation.append(layers[i].renderLayer);
+ }
layers[i].offsetFromRenderer = newOffsetFromRenderer;
layers[i].offsetFromRendererSet = true;
@@ -595,11 +591,17 @@ void CompositedLayerMapping::updateSquashingLayerGeometry(const LayoutPoint& off
layers[i].renderLayer->setOffsetFromSquashingLayerOrigin(layers[i].offsetFromRenderer);
}
+ squashingLayer->setPosition(squashLayerBounds.location());
+ squashingLayer->setSize(squashLayerBounds.size());
+
+ *offsetFromTransformedAncestor = referenceOffsetFromTransformedAncestor;
+ offsetFromTransformedAncestor->move(squashLayerOriginInOwningLayerSpace);
+
for (size_t i = 0; i < layers.size(); ++i)
layers[i].localClipRectForSquashedLayer = localClipRectForSquashedLayer(referenceLayer, layers[i], layers);
}
-void CompositedLayerMapping::updateGraphicsLayerGeometry(GraphicsLayerUpdater::UpdateType updateType, const RenderLayer* compositingContainer)
+void CompositedLayerMapping::updateGraphicsLayerGeometry(GraphicsLayerUpdater::UpdateType updateType, const RenderLayer* compositingContainer, Vector<RenderLayer*>& layersNeedingPaintInvalidation)
{
if (!shouldUpdateGraphicsLayer(updateType))
return;
@@ -637,7 +639,7 @@ void CompositedLayerMapping::updateGraphicsLayerGeometry(GraphicsLayerUpdater::U
FloatSize contentsSize = relativeCompositingBounds.size();
updateMainGraphicsLayerGeometry(relativeCompositingBounds, localCompositingBounds, graphicsLayerParentLocation);
- updateSquashingLayerGeometry(offsetFromCompositedAncestor, graphicsLayerParentLocation, m_owningLayer, m_squashedLayers, m_squashingLayer.get(), &m_squashingLayerOffsetFromTransformedAncestor);
+ updateSquashingLayerGeometry(offsetFromCompositedAncestor, graphicsLayerParentLocation, m_owningLayer, m_squashedLayers, m_squashingLayer.get(), &m_squashingLayerOffsetFromTransformedAncestor, layersNeedingPaintInvalidation);
// If we have a layer that clips children, position it.
IntRect clippingBox;
@@ -651,7 +653,7 @@ void CompositedLayerMapping::updateGraphicsLayerGeometry(GraphicsLayerUpdater::U
updateTransformGeometry(snappedOffsetFromCompositedAncestor, relativeCompositingBounds);
updateForegroundLayerGeometry(contentsSize, clippingBox);
updateBackgroundLayerGeometry(contentsSize);
- updateReflectionLayerGeometry();
+ updateReflectionLayerGeometry(layersNeedingPaintInvalidation);
updateScrollingLayerGeometry(localCompositingBounds);
updateChildClippingMaskLayerGeometry();
@@ -811,13 +813,13 @@ void CompositedLayerMapping::updateTransformGeometry(const IntPoint& snappedOffs
}
}
-void CompositedLayerMapping::updateReflectionLayerGeometry()
+void CompositedLayerMapping::updateReflectionLayerGeometry(Vector<RenderLayer*>& layersNeedingPaintInvalidation)
{
if (!m_owningLayer.reflectionInfo() || !m_owningLayer.reflectionInfo()->reflectionLayer()->hasCompositedLayerMapping())
return;
CompositedLayerMappingPtr reflectionCompositedLayerMapping = m_owningLayer.reflectionInfo()->reflectionLayer()->compositedLayerMapping();
- reflectionCompositedLayerMapping->updateGraphicsLayerGeometry(GraphicsLayerUpdater::ForceUpdate, &m_owningLayer);
+ reflectionCompositedLayerMapping->updateGraphicsLayerGeometry(GraphicsLayerUpdater::ForceUpdate, &m_owningLayer, layersNeedingPaintInvalidation);
}
void CompositedLayerMapping::updateScrollingLayerGeometry(const IntRect& localCompositingBounds)
« no previous file with comments | « Source/core/rendering/compositing/CompositedLayerMapping.h ('k') | Source/core/rendering/compositing/GraphicsLayerUpdater.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698