Modified: trunk/Source/WebCore/ChangeLog (100387 => 100388)
--- trunk/Source/WebCore/ChangeLog 2011-11-16 02:13:12 UTC (rev 100387)
+++ trunk/Source/WebCore/ChangeLog 2011-11-16 02:38:47 UTC (rev 100388)
@@ -1,3 +1,22 @@
+2011-11-15 W. James MacLean <[email protected]>
+
+ [chromium] Move setVisibleRect() calls into calculateDrawTransformAndVisibility()
+ https://bugs.webkit.org/show_bug.cgi?id=72162
+
+ Reviewed by Kenneth Russell.
+
+ Refactoring of existing functionality, so uses existing tests.
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::drawLayer):
+ * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
+ (WebCore::paintContentsIfDirty):
+ (WebCore::CCLayerTreeHost::paintMaskAndReplicaForRenderSurface):
+ (WebCore::CCLayerTreeHost::paintLayerContents):
+ * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
+ (WebCore::walkLayersAndCalculateVisibleLayerRects):
+ (WebCore::CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility):
+
2011-11-15 Sheriff Bot <[email protected]>
Unreviewed, rolling out r100340.
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (100387 => 100388)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp 2011-11-16 02:13:12 UTC (rev 100387)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp 2011-11-16 02:38:47 UTC (rev 100388)
@@ -334,12 +334,10 @@
paintLayerContents(m_updateList);
}
-static void paintContentsIfDirty(LayerChromium* layer, const IntRect& visibleLayerRect)
+static void paintContentsIfDirty(LayerChromium* layer)
{
- if (layer->drawsContent()) {
- layer->setVisibleLayerRect(visibleLayerRect);
+ if (layer->drawsContent())
layer->paintContentsIfDirty();
- }
}
void CCLayerTreeHost::paintMaskAndReplicaForRenderSurface(LayerChromium* renderSurfaceLayer)
@@ -350,20 +348,20 @@
if (renderSurfaceLayer->maskLayer()) {
renderSurfaceLayer->maskLayer()->setLayerTreeHost(this);
- paintContentsIfDirty(renderSurfaceLayer->maskLayer(), IntRect(IntPoint(), renderSurfaceLayer->contentBounds()));
+ renderSurfaceLayer->maskLayer()->setVisibleLayerRect(IntRect(IntPoint(), renderSurfaceLayer->contentBounds()));
+ paintContentsIfDirty(renderSurfaceLayer->maskLayer());
}
LayerChromium* replicaLayer = renderSurfaceLayer->replicaLayer();
if (replicaLayer) {
- IntRect visibleLayerRect = CCLayerTreeHostCommon::calculateVisibleLayerRect<LayerChromium>(renderSurfaceLayer);
-
replicaLayer->setLayerTreeHost(this);
- paintContentsIfDirty(replicaLayer, visibleLayerRect);
+ paintContentsIfDirty(replicaLayer);
if (replicaLayer->maskLayer()) {
replicaLayer->maskLayer()->setLayerTreeHost(this);
- paintContentsIfDirty(replicaLayer->maskLayer(), IntRect(IntPoint(), replicaLayer->maskLayer()->contentBounds()));
+ replicaLayer->maskLayer()->setVisibleLayerRect(IntRect(IntPoint(), replicaLayer->maskLayer()->contentBounds()));
+ paintContentsIfDirty(replicaLayer->maskLayer());
}
}
}
@@ -400,10 +398,8 @@
ASSERT(layer->opacity());
ASSERT(!layer->bounds().isEmpty());
-
- IntRect visibleLayerRect = CCLayerTreeHostCommon::calculateVisibleLayerRect<LayerChromium>(layer);
-
- paintContentsIfDirty(layer, visibleLayerRect);
+
+ paintContentsIfDirty(layer);
}
}
}
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp (100387 => 100388)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp 2011-11-16 02:13:12 UTC (rev 100387)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp 2011-11-16 02:38:47 UTC (rev 100388)
@@ -437,14 +437,35 @@
sortLayers(&descendants.at(sortingStartIndex), descendants.end(), layerSorter);
}
+// FIXME: Instead of using the following function to set visibility rects on a second
+// tree pass, revise calculateVisibleLayerRect() so that this can be done in a single
+// pass inside calculateDrawTransformsAndVisibilityInternal<>().
+template<typename LayerType, typename RenderSurfaceType>
+static void walkLayersAndCalculateVisibleLayerRects(const Vector<RefPtr<LayerType> >& renderSurfaceLayerList)
+{
+ for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
+ LayerType* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex].get();
+ RenderSurfaceType* renderSurface = renderSurfaceLayer->renderSurface();
+
+ Vector<RefPtr<LayerType> >& layerList = renderSurface->layerList();
+ for (unsigned layerIndex = 0; layerIndex < layerList.size(); ++layerIndex) {
+ LayerType* layer = layerList[layerIndex].get();
+ IntRect visibleLayerRect = CCLayerTreeHostCommon::calculateVisibleLayerRect<LayerType>(layer);
+ layer->setVisibleLayerRect(visibleLayerRect);
+ }
+ }
+}
+
void CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(LayerChromium* layer, LayerChromium* rootLayer, const TransformationMatrix& parentMatrix, const TransformationMatrix& fullHierarchyMatrix, Vector<RefPtr<LayerChromium> >& renderSurfaceLayerList, Vector<RefPtr<LayerChromium> >& layerList, int maxTextureSize)
{
- return WebCore::calculateDrawTransformsAndVisibilityInternal<LayerChromium, RenderSurfaceChromium, void*>(layer, rootLayer, parentMatrix, fullHierarchyMatrix, renderSurfaceLayerList, layerList, 0, maxTextureSize);
+ WebCore::calculateDrawTransformsAndVisibilityInternal<LayerChromium, RenderSurfaceChromium, void*>(layer, rootLayer, parentMatrix, fullHierarchyMatrix, renderSurfaceLayerList, layerList, 0, maxTextureSize);
+ walkLayersAndCalculateVisibleLayerRects<LayerChromium, RenderSurfaceChromium>(renderSurfaceLayerList);
}
void CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(CCLayerImpl* layer, CCLayerImpl* rootLayer, const TransformationMatrix& parentMatrix, const TransformationMatrix& fullHierarchyMatrix, Vector<RefPtr<CCLayerImpl> >& renderSurfaceLayerList, Vector<RefPtr<CCLayerImpl> >& layerList, CCLayerSorter* layerSorter, int maxTextureSize)
{
- return calculateDrawTransformsAndVisibilityInternal<CCLayerImpl, CCRenderSurface, CCLayerSorter>(layer, rootLayer, parentMatrix, fullHierarchyMatrix, renderSurfaceLayerList, layerList, layerSorter, maxTextureSize);
+ calculateDrawTransformsAndVisibilityInternal<CCLayerImpl, CCRenderSurface, CCLayerSorter>(layer, rootLayer, parentMatrix, fullHierarchyMatrix, renderSurfaceLayerList, layerList, layerSorter, maxTextureSize);
+ walkLayersAndCalculateVisibleLayerRects<CCLayerImpl, CCRenderSurface>(renderSurfaceLayerList);
}
} // namespace WebCore