Title: [100388] trunk/Source/WebCore
Revision
100388
Author
[email protected]
Date
2011-11-15 18:38:47 -0800 (Tue, 15 Nov 2011)

Log Message

[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):

Modified Paths

Diff

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/LayerRendererChromium.cpp (100387 => 100388)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2011-11-16 02:13:12 UTC (rev 100387)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2011-11-16 02:38:47 UTC (rev 100388)
@@ -578,10 +578,7 @@
         return;
     }
 
-    IntRect visibleLayerRect = CCLayerTreeHostCommon::calculateVisibleLayerRect<CCLayerImpl>(layer);
-    layer->setVisibleLayerRect(visibleLayerRect);
-
-    if (visibleLayerRect.isEmpty())
+    if (layer->visibleLayerRect().isEmpty())
         return;
 
     if (layer->usesLayerClipping())

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
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to