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

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

Issue 143283011: Make squashing work with subpixel layout (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Track and use subpixel accumulation for each squashed RenderLayer Created 6 years, 9 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 1997accd403e335080362befcb932f53bcb2f9ff..3212e17039b1700bae759a6027ecce80fa486c4b 100644
--- a/Source/core/rendering/compositing/CompositedLayerMapping.cpp
+++ b/Source/core/rendering/compositing/CompositedLayerMapping.cpp
@@ -599,12 +599,13 @@ void CompositedLayerMapping::updateSquashingLayerGeometry(const IntPoint& delta)
// The totalSquashBounds is positioned with respect to m_owningLayer of this CompositedLayerMapping.
// But the squashingLayer needs to be positioned with respect to the ancestor CompositedLayerMapping.
// The conversion between m_owningLayer and the ancestor CLM is already computed in the caller as |delta|.
- // FIXME: probably not the right place to round from LayoutPoint to IntPoint?
- IntPoint squashLayerPosition = pixelSnappedIntRect(totalSquashBounds).location();
- squashLayerPosition.moveBy(delta);
+ totalSquashBounds.move(m_subpixelAccumulation);
chrishtr 2014/03/13 21:46:05 Why still use m_subpixelAccumulation at all? The a
ajuma 2014/03/13 21:55:48 The reason we use m_subpixelAccumulation here and
chrishtr 2014/03/17 20:20:33 Sure, but it looks like you are using that to set
+ IntRect squashLayerBounds = enclosingIntRect(totalSquashBounds);
+ IntPoint squashLayerOrigin = squashLayerBounds.location();
+ squashLayerBounds.moveBy(delta);
- m_squashingLayer->setPosition(squashLayerPosition);
- m_squashingLayer->setSize(totalSquashBounds.size());
+ m_squashingLayer->setPosition(squashLayerBounds.location());
+ m_squashingLayer->setSize(squashLayerBounds.size());
// Now that the squashing bounds are known, we can convert the RenderLayer painting offsets
// from CLM owning layer space to the squashing layer space.
@@ -613,11 +614,13 @@ void CompositedLayerMapping::updateSquashingLayerGeometry(const IntPoint& delta)
// the squashed RenderLayer described w.r.t. m_squashingLayer's origin. For this purpose we already cached
// offsetFromSquashingCLM before, which describes where the squashed RenderLayer is located w.r.t.
// m_owningLayer. So we just need to convert that point from m_owningLayer space to m_squashingLayer
- // space. This is simply done by subtracing totalSquashBounds... but then the offset overall needs to be
+ // space. This is simply done by subtracing squashLayerOrigin... but then the offset overall needs to be
// negated because that's the direction that the painting code expects the offset to be.
for (size_t i = 0; i < m_squashedLayers.size(); ++i) {
- m_squashedLayers[i].offsetFromRenderer = IntSize(-m_squashedLayers[i].offsetFromSquashingCLM.width() + totalSquashBounds.x(),
- -m_squashedLayers[i].offsetFromSquashingCLM.height() + totalSquashBounds.y());
+ LayoutSize offsetFromSquashLayerOrigin = LayoutSize(m_squashedLayers[i].offsetFromSquashingCLM.width() - squashLayerOrigin.x() + m_subpixelAccumulation.width(),
chrishtr 2014/03/17 20:20:33 Isn't this wrong to use m_subpixelAccumulation? Ea
ajuma 2014/03/18 17:32:17 I've cleaned up the code (here and above) to make
+ m_squashedLayers[i].offsetFromSquashingCLM.height() - squashLayerOrigin.y() + m_subpixelAccumulation.height());
+ m_squashedLayers[i].offsetFromRenderer = -flooredIntSize(offsetFromSquashLayerOrigin);
+ m_squashedLayers[i].subpixelAccumulation = offsetFromSquashLayerOrigin.fraction();
// FIXME: find a better design to avoid this redundant value - most likely it will make
// sense to move the paint task info into RenderLayer's m_compositingProperties.
@@ -1900,10 +1903,10 @@ void CompositedLayerMapping::doPaintTask(GraphicsLayerPaintInfo& paintInfo, Grap
if (!(paintInfo.paintingPhase & GraphicsLayerPaintOverflowContents)) {
LayoutRect bounds = paintInfo.compositedBounds;
- bounds.move(m_subpixelAccumulation);
+ bounds.move(paintInfo.subpixelAccumulation);
dirtyRect.intersect(pixelSnappedIntRect(bounds));
} else {
- dirtyRect.move(roundedIntSize(m_subpixelAccumulation));
+ dirtyRect.move(roundedIntSize(paintInfo.subpixelAccumulation));
}
#ifndef NDEBUG
@@ -1912,7 +1915,7 @@ void CompositedLayerMapping::doPaintTask(GraphicsLayerPaintInfo& paintInfo, Grap
if (paintInfo.renderLayer->compositingState() != PaintsIntoGroupedBacking) {
// FIXME: GraphicsLayers need a way to split for RenderRegions.
- LayerPaintingInfo paintingInfo(paintInfo.renderLayer, dirtyRect, PaintBehaviorNormal, m_subpixelAccumulation);
+ LayerPaintingInfo paintingInfo(paintInfo.renderLayer, dirtyRect, PaintBehaviorNormal, paintInfo.subpixelAccumulation);
paintInfo.renderLayer->paintLayerContents(context, paintingInfo, paintFlags);
ASSERT(!paintInfo.isBackgroundLayer || paintFlags & PaintLayerPaintingRootBackgroundOnly);
@@ -1921,7 +1924,7 @@ void CompositedLayerMapping::doPaintTask(GraphicsLayerPaintInfo& paintInfo, Grap
paintInfo.renderLayer->paintLayerContents(context, paintingInfo, paintFlags | PaintLayerPaintingOverlayScrollbars);
} else {
ASSERT(compositor()->layerSquashingEnabled());
- LayerPaintingInfo paintingInfo(paintInfo.renderLayer, dirtyRect, PaintBehaviorNormal, LayoutSize());
+ LayerPaintingInfo paintingInfo(paintInfo.renderLayer, dirtyRect, PaintBehaviorNormal, paintInfo.subpixelAccumulation);
paintInfo.renderLayer->paintLayer(context, paintingInfo, paintFlags);
}
@@ -1970,6 +1973,7 @@ void CompositedLayerMapping::paintContents(const GraphicsLayer* graphicsLayer, G
paintInfo.offsetFromRenderer = graphicsLayer->offsetFromRenderer();
paintInfo.paintingPhase = paintingPhase;
paintInfo.isBackgroundLayer = (graphicsLayer == m_backgroundLayer);
+ paintInfo.subpixelAccumulation = m_subpixelAccumulation;
// We have to use the same root as for hit testing, because both methods can compute and cache clipRects.
doPaintTask(paintInfo, &context, clip);
@@ -2039,7 +2043,7 @@ void CompositedLayerMapping::setCompositedBounds(const LayoutRect& bounds)
m_compositedBounds = bounds;
}
-bool CompositedLayerMapping::updateSquashingLayerAssignment(RenderLayer* layer, IntSize offsetFromSquashingCLM, size_t nextSquashedLayerIndex)
+bool CompositedLayerMapping::updateSquashingLayerAssignment(RenderLayer* layer, LayoutSize offsetFromSquashingCLM, size_t nextSquashedLayerIndex)
{
ASSERT(compositor()->layerSquashingEnabled());
« no previous file with comments | « Source/core/rendering/compositing/CompositedLayerMapping.h ('k') | Source/core/rendering/compositing/RenderLayerCompositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698