Title: [115396] trunk/Source/WebCore
Revision
115396
Author
[email protected]
Date
2012-04-26 18:40:10 -0700 (Thu, 26 Apr 2012)

Log Message

Improve compositing logging output
https://bugs.webkit.org/show_bug.cgi?id=85010

Reviewed by Dean Jackson.

In the compositing log channel output, indent the layers
based on z-order tree depth. Tabulate the summary, and
show obligate and secondary backing store area separately.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateClipRects):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::RenderLayerCompositor):
(WebCore::RenderLayerCompositor::updateCompositingLayers):
(WebCore::RenderLayerCompositor::logLayerInfo):
(WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
(WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
(WebCore::RenderLayerCompositor::reasonForCompositing):
* rendering/RenderLayerCompositor.h:
(RenderLayerCompositor):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (115395 => 115396)


--- trunk/Source/WebCore/ChangeLog	2012-04-27 01:38:05 UTC (rev 115395)
+++ trunk/Source/WebCore/ChangeLog	2012-04-27 01:40:10 UTC (rev 115396)
@@ -1,3 +1,26 @@
+2012-04-26  Simon Fraser  <[email protected]>
+
+        Improve compositing logging output
+        https://bugs.webkit.org/show_bug.cgi?id=85010
+
+        Reviewed by Dean Jackson.
+
+        In the compositing log channel output, indent the layers
+        based on z-order tree depth. Tabulate the summary, and
+        show obligate and secondary backing store area separately.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::updateClipRects):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
+        (WebCore::RenderLayerCompositor::updateCompositingLayers):
+        (WebCore::RenderLayerCompositor::logLayerInfo):
+        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
+        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
+        (WebCore::RenderLayerCompositor::reasonForCompositing):
+        * rendering/RenderLayerCompositor.h:
+        (RenderLayerCompositor):
+
 2012-04-26  Anders Carlsson  <[email protected]>
 
         REGRESSION (r115163): Unable to scroll article body with trackpad on altdevblogaday.com blog post

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (115395 => 115396)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2012-04-27 01:38:05 UTC (rev 115395)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2012-04-27 01:40:10 UTC (rev 115396)
@@ -177,7 +177,8 @@
     , m_rootLayerUpdateCount(0)
     , m_obligateCompositedLayerCount(0)
     , m_secondaryCompositedLayerCount(0)
-    , m_backingAreaMegaPixels(0)
+    , m_obligatoryBackingAreaMegaPixels(0)
+    , m_secondaryBackingAreaMegaPixels(0)
 #endif
 {
 }
@@ -394,7 +395,8 @@
     if (compositingLogEnabled() && isFullUpdate && (needHierarchyUpdate || needGeometryUpdate)) {
         m_obligateCompositedLayerCount = 0;
         m_secondaryCompositedLayerCount = 0;
-        m_backingAreaMegaPixels = 0;
+        m_obligatoryBackingAreaMegaPixels = 0;
+        m_secondaryBackingAreaMegaPixels = 0;
 
         Frame* frame = m_renderView->frameView()->frame();
         bool isMainFrame = !m_renderView->document()->ownerElement();
@@ -406,7 +408,7 @@
     if (needHierarchyUpdate) {
         // Update the hierarchy of the compositing layers.
         Vector<GraphicsLayer*> childList;
-        rebuildCompositingLayerTree(updateRoot, childList);
+        rebuildCompositingLayerTree(updateRoot, childList, 0);
 
         // Host the document layer in the RenderView's root layer.
         if (isFullUpdate) {
@@ -420,15 +422,17 @@
     } else if (needGeometryUpdate) {
         // We just need to do a geometry update. This is only used for position:fixed scrolling;
         // most of the time, geometry is updated via RenderLayer::styleChanged().
-        updateLayerTreeGeometry(updateRoot);
+        updateLayerTreeGeometry(updateRoot, 0);
     }
     
 #if !LOG_DISABLED
     if (compositingLogEnabled() && isFullUpdate && (needHierarchyUpdate || needGeometryUpdate)) {
         double endTime = currentTime();
-        LOG(Compositing, "%d layers (%d primary, %d secondary), total backing area %.2fMP, update took %.2fms, \n",
+        LOG(Compositing, "Total layers   primary   secondary   obligatory backing (MP)   secondary backing(MP)   total backing (MP)  update time (ms)\n");
+
+        LOG(Compositing, "%8d %11d %9d %20.2f %22.2f %22.2f %18.2f\n",
             m_obligateCompositedLayerCount + m_secondaryCompositedLayerCount, m_obligateCompositedLayerCount,
-            m_secondaryCompositedLayerCount, m_backingAreaMegaPixels, 1000.0 * (endTime - startTime));
+            m_secondaryCompositedLayerCount, m_obligatoryBackingAreaMegaPixels, m_secondaryBackingAreaMegaPixels, m_obligatoryBackingAreaMegaPixels + m_secondaryBackingAreaMegaPixels, 1000.0 * (endTime - startTime));
     }
 #endif
     ASSERT(updateRoot || !m_compositingLayersNeedRebuild);
@@ -438,21 +442,21 @@
 }
 
 #if !LOG_DISABLED
-void RenderLayerCompositor::logLayerInfo(const RenderLayer* layer)
+void RenderLayerCompositor::logLayerInfo(const RenderLayer* layer, int depth)
 {
     if (!compositingLogEnabled())
         return;
         
-    if (requiresCompositingLayer(layer) || layer->isRootLayer())
+    RenderLayerBacking* backing = layer->backing();
+    if (requiresCompositingLayer(layer) || layer->isRootLayer()) {
         ++m_obligateCompositedLayerCount;
-    else
+        m_obligatoryBackingAreaMegaPixels += backing->backingStoreArea() / PIXELS_PER_MEGAPIXEL;
+    } else {
         ++m_secondaryCompositedLayerCount;
+        m_secondaryBackingAreaMegaPixels += backing->backingStoreArea() / PIXELS_PER_MEGAPIXEL;
+    }
 
-    RenderLayerBacking* backing = layer->backing();
-    
-    m_backingAreaMegaPixels += backing->backingStoreArea() / PIXELS_PER_MEGAPIXEL;
-
-    LOG(Compositing, "  Layer %p %dx%d %.3fMP (%s) %s\n", layer, backing->compositedBounds().width(), backing->compositedBounds().height(),
+    LOG(Compositing, "%*p %dx%d %.3fMP (%s) %s\n", 12 + depth * 2, layer, backing->compositedBounds().width(), backing->compositedBounds().height(),
         backing->backingStoreArea() / PIXELS_PER_MEGAPIXEL,
         reasonForCompositing(layer), layer->backing()->nameForLayer().utf8().data());
 }
@@ -890,7 +894,7 @@
 }
 #endif
 
-void RenderLayerCompositor::rebuildCompositingLayerTree(RenderLayer* layer, Vector<GraphicsLayer*>& childLayersOfEnclosingLayer)
+void RenderLayerCompositor::rebuildCompositingLayerTree(RenderLayer* layer, Vector<GraphicsLayer*>& childLayersOfEnclosingLayer, int depth)
 {
     // Make the layer compositing if necessary, and set up clipping and content layers.
     // Note that we can only do work here that is independent of whether the descendant layers
@@ -914,7 +918,9 @@
             updateRootLayerPosition();
 
 #if !LOG_DISABLED
-        logLayerInfo(layer);
+        logLayerInfo(layer, depth);
+#else
+        UNUSED_PARAM(depth);
 #endif
     }
 
@@ -934,7 +940,7 @@
             size_t listSize = negZOrderList->size();
             for (size_t i = 0; i < listSize; ++i) {
                 RenderLayer* curLayer = negZOrderList->at(i);
-                rebuildCompositingLayerTree(curLayer, childList);
+                rebuildCompositingLayerTree(curLayer, childList, depth + 1);
             }
         }
 
@@ -948,7 +954,7 @@
         size_t listSize = normalFlowList->size();
         for (size_t i = 0; i < listSize; ++i) {
             RenderLayer* curLayer = normalFlowList->at(i);
-            rebuildCompositingLayerTree(curLayer, childList);
+            rebuildCompositingLayerTree(curLayer, childList, depth + 1);
         }
     }
     
@@ -957,7 +963,7 @@
             size_t listSize = posZOrderList->size();
             for (size_t i = 0; i < listSize; ++i) {
                 RenderLayer* curLayer = posZOrderList->at(i);
-                rebuildCompositingLayerTree(curLayer, childList);
+                rebuildCompositingLayerTree(curLayer, childList, depth + 1);
             }
         }
     }
@@ -1082,7 +1088,7 @@
 }
 
 // This just updates layer geometry without changing the hierarchy.
-void RenderLayerCompositor::updateLayerTreeGeometry(RenderLayer* layer)
+void RenderLayerCompositor::updateLayerTreeGeometry(RenderLayer* layer, int depth)
 {
     if (RenderLayerBacking* layerBacking = layer->backing()) {
         // The compositing state of all our children has been updated already, so now
@@ -1101,7 +1107,9 @@
             updateRootLayerPosition();
 
 #if !LOG_DISABLED
-        logLayerInfo(layer);
+        logLayerInfo(layer, depth);
+#else
+        UNUSED_PARAM(depth);
 #endif
     }
 
@@ -1115,7 +1123,7 @@
         if (Vector<RenderLayer*>* negZOrderList = layer->negZOrderList()) {
             size_t listSize = negZOrderList->size();
             for (size_t i = 0; i < listSize; ++i)
-                updateLayerTreeGeometry(negZOrderList->at(i));
+                updateLayerTreeGeometry(negZOrderList->at(i), depth + 1);
         }
     }
 
@@ -1123,14 +1131,14 @@
     if (Vector<RenderLayer*>* normalFlowList = layer->normalFlowList()) {
         size_t listSize = normalFlowList->size();
         for (size_t i = 0; i < listSize; ++i)
-            updateLayerTreeGeometry(normalFlowList->at(i));
+            updateLayerTreeGeometry(normalFlowList->at(i), depth + 1);
     }
     
     if (layer->isStackingContext()) {
         if (Vector<RenderLayer*>* posZOrderList = layer->posZOrderList()) {
             size_t listSize = posZOrderList->size();
             for (size_t i = 0; i < listSize; ++i)
-                updateLayerTreeGeometry(posZOrderList->at(i));
+                updateLayerTreeGeometry(posZOrderList->at(i), depth + 1);
         }
     }
 }
@@ -1441,7 +1449,13 @@
         layer = toRenderBoxModelObject(renderer)->layer();
     }
 
-    if (requiresCompositingForTransform(renderer))
+    if (renderer->hasTransform() && renderer->style()->hasPerspective())
+        return "perspective";
+
+    if (renderer->hasTransform() && (renderer->style()->transformStyle3D() == TransformStyle3DPreserve3D))
+        return "preserve-3d";
+
+    if (renderer->hasTransform())
         return "transform";
 
     if (requiresCompositingForVideo(renderer))

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (115395 => 115396)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2012-04-27 01:38:05 UTC (rev 115395)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2012-04-27 01:40:10 UTC (rev 115396)
@@ -249,10 +249,10 @@
     void computeCompositingRequirements(RenderLayer*, OverlapMap*, struct CompositingState&, bool& layersChanged);
     
     // Recurses down the tree, parenting descendant compositing layers and collecting an array of child layers for the current compositing layer.
-    void rebuildCompositingLayerTree(RenderLayer*, Vector<GraphicsLayer*>& childGraphicsLayersOfEnclosingLayer);
+    void rebuildCompositingLayerTree(RenderLayer*, Vector<GraphicsLayer*>& childGraphicsLayersOfEnclosingLayer, int depth);
 
     // Recurses down the tree, updating layer geometry only.
-    void updateLayerTreeGeometry(RenderLayer*);
+    void updateLayerTreeGeometry(RenderLayer*, int depth);
     
     // Hook compositing layers together
     void setCompositingParent(RenderLayer* childLayer, RenderLayer* parentLayer);
@@ -302,7 +302,7 @@
 
 #if !LOG_DISABLED
     const char* reasonForCompositing(const RenderLayer*);
-    void logLayerInfo(const RenderLayer*);
+    void logLayerInfo(const RenderLayer*, int depth);
 #endif
 
 private:
@@ -350,7 +350,8 @@
     int m_rootLayerUpdateCount;
     int m_obligateCompositedLayerCount; // count of layer that have to be composited.
     int m_secondaryCompositedLayerCount; // count of layers that have to be composited because of stacking or overlap.
-    double m_backingAreaMegaPixels;
+    double m_obligatoryBackingAreaMegaPixels;
+    double m_secondaryBackingAreaMegaPixels;
 #endif
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to