Title: [143691] trunk/Source/WebCore
Revision
143691
Author
[email protected]
Date
2013-02-21 22:33:52 -0800 (Thu, 21 Feb 2013)

Log Message

Expose a list of all reasons that qualify a RenderLayer to be composited
https://bugs.webkit.org/show_bug.cgi?id=110505

Expose the various reasons that can qualify a RenderLayer to be composited
via a new bitmask returned by the reasonForCompositing() method on
RenderLayerCompositor. This method already existed and was used for logging
purposes, but the previous functionality is now accessed via the
logReasonForCompositing() method.

This will allow the the InspectorLayerTreeAgent to provide this information
to the front-end on a per-layer basis as requested by the front-end.

Reviewed by Simon Fraser.

No new tests.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (143690 => 143691)


--- trunk/Source/WebCore/ChangeLog	2013-02-22 06:25:44 UTC (rev 143690)
+++ trunk/Source/WebCore/ChangeLog	2013-02-22 06:33:52 UTC (rev 143691)
@@ -1,3 +1,29 @@
+2013-02-21  Antoine Quint  <[email protected]>
+
+        Expose a list of all reasons that qualify a RenderLayer to be composited
+        https://bugs.webkit.org/show_bug.cgi?id=110505
+
+        Expose the various reasons that can qualify a RenderLayer to be composited
+        via a new bitmask returned by the reasonForCompositing() method on
+        RenderLayerCompositor. This method already existed and was used for logging
+        purposes, but the previous functionality is now accessed via the
+        logReasonForCompositing() method.
+
+        This will allow the the InspectorLayerTreeAgent to provide this information
+        to the front-end on a per-layer basis as requested by the front-end.
+
+        Reviewed by Simon Fraser.
+
+        No new tests.
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::logLayerInfo):
+        (WebCore::RenderLayerCompositor::reasonsForCompositing):
+        (WebCore):
+        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
+        * rendering/RenderLayerCompositor.h:
+        (RenderLayerCompositor):
+
 2013-02-21  Takashi Sakamoto  <[email protected]>
 
         RenderTable::paintBoxDecorations sometimes draws box-shadow twice.

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (143690 => 143691)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-02-22 06:25:44 UTC (rev 143690)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-02-22 06:33:52 UTC (rev 143691)
@@ -578,7 +578,7 @@
 
     LOG(Compositing, "%*p %dx%d %.2fKB (%s) %s\n", 12 + depth * 2, layer, backing->compositedBounds().width(), backing->compositedBounds().height(),
         backing->backingStoreMemoryEstimate() / 1024,
-        reasonForCompositing(layer), layer->name().utf8().data());
+        logReasonsForCompositing(layer), layer->name().utf8().data());
 }
 #endif
 
@@ -1713,9 +1713,13 @@
     return false;
 }
 
-#if !LOG_DISABLED
-const char* RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer)
+CompositingReasons RenderLayerCompositor::reasonsForCompositing(const RenderLayer* layer) const
 {
+    CompositingReasons reasons = CompositingReasonNone;
+
+    if (!layer || !layer->isComposited())
+        return reasons;
+
     RenderObject* renderer = layer->renderer();
     if (layer->isReflection()) {
         renderer = renderer->parent();
@@ -1723,77 +1727,152 @@
     }
 
     if (requiresCompositingForTransform(renderer))
-        return "3D transform";
+        reasons |= CompositingReason3DTransform;
 
     if (requiresCompositingForVideo(renderer))
-        return "video";
+        reasons |= CompositingReasonVideo;
 
     if (requiresCompositingForCanvas(renderer))
-        return "canvas";
+        reasons |= CompositingReasonCanvas;
 
     if (requiresCompositingForPlugin(renderer))
-        return "plugin";
+        reasons |= CompositingReasonPlugin;
 
     if (requiresCompositingForFrame(renderer))
-        return "iframe";
+        reasons |= CompositingReasonIFrame;
     
     if ((canRender3DTransforms() && renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden))
-        return "backface-visibility: hidden";
+        reasons |= CompositingReasonBackfaceVisibilityHidden;
 
     if (clipsCompositingDescendants(layer))
-        return "clips compositing descendants";
+        reasons |= CompositingReasonClipsCompositingDescendants;
 
     if (requiresCompositingForAnimation(renderer))
-        return "animation";
+        reasons |= CompositingReasonAnimation;
 
     if (requiresCompositingForFilters(renderer))
-        return "filters";
+        reasons |= CompositingReasonFilters;
 
     if (requiresCompositingForPosition(renderer, layer))
-        return renderer->style()->position() == FixedPosition ? "position: fixed" : "position: sticky";
+        reasons |= renderer->style()->position() == FixedPosition ? CompositingReasonPositionFixed : CompositingReasonPositionSticky;
 
     if (requiresCompositingForOverflowScrolling(layer))
-        return "-webkit-overflow-scrolling: touch";
+        reasons |= CompositingReasonOverflowScrollingTouch;
 
     if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForStacking)
-        return "stacking";
-
-    if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForOverlap)
-        return "overlap";
-
-    if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForBackgroundLayer)
-        return "negative z-index children";
-
-    if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForGraphicalEffect) {
+        reasons |= CompositingReasonStacking;
+    else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForOverlap)
+        reasons |= CompositingReasonOverlap;
+    else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForBackgroundLayer)
+        reasons |= CompositingReasonNegativeZIndexChildren;
+    else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForGraphicalEffect) {
         if (layer->transform())
-            return "transform with composited descendants";
+            reasons |= CompositingReasonTransformWithCompositedDescendants;
 
         if (renderer->isTransparent())
-            return "opacity with composited descendants";
+            reasons |= CompositingReasonOpacityWithCompositedDescendants;
 
         if (renderer->hasMask())
-            return "mask with composited descendants";
+            reasons |= CompositingReasonMaskWithCompositedDescendants;
 
         if (renderer->hasReflection())
-            return "reflection with composited descendants";
+            reasons |= CompositingReasonReflectionWithCompositedDescendants;
 
         if (renderer->hasFilter())
-            return "filter with composited descendants";
+            reasons |= CompositingReasonFilterWithCompositedDescendants;
             
         if (renderer->hasBlendMode())
-            return "blending with composited descendants";
-    }
+            reasons |= CompositingReasonBlendingWithCompositedDescendants;
+    } else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPerspective)
+        reasons |= CompositingReasonPerspective;
+    else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPreserve3D)
+        reasons |= CompositingReasonPreserve3D;
 
-    if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPerspective)
+    if (inCompositingMode() && layer->isRootLayer())
+        reasons |= CompositingReasonRoot;
+
+    return reasons;
+}
+
+#if !LOG_DISABLED
+const char* RenderLayerCompositor::logReasonsForCompositing(const RenderLayer* layer)
+{
+    CompositingReasons reasons = reasonsForCompositing(layer);
+
+    if (!reasons)
+        return "";
+
+    if (reasons & CompositingReason3DTransform)
+        return "3D transform";
+
+    if (reasons & CompositingReasonVideo)
+        return "video";
+
+    if (reasons & CompositingReasonCanvas)
+        return "canvas";
+
+    if (reasons & CompositingReasonPlugin)
+        return "plugin";
+
+    if (reasons & CompositingReasonIFrame)
+        return "iframe";
+    
+    if (reasons & CompositingReasonBackfaceVisibilityHidden)
+        return "backface-visibility: hidden";
+
+    if (reasons & CompositingReasonClipsCompositingDescendants)
+        return "clips compositing descendants";
+
+    if (reasons & CompositingReasonAnimation)
+        return "animation";
+
+    if (reasons & CompositingReasonFilters)
+        return "filters";
+
+    if (reasons & CompositingReasonPositionFixed)
+        return "position: fixed";
+
+    if (reasons & CompositingReasonPositionSticky)
+        return "position: sticky";
+
+    if (reasons & CompositingReasonOverflowScrollingTouch)
+        return "-webkit-overflow-scrolling: touch";
+
+    if (reasons & CompositingReasonStacking)
+        return "stacking";
+
+    if (reasons & CompositingReasonOverlap)
+        return "overlap";
+
+    if (reasons & CompositingReasonNegativeZIndexChildren)
+        return "negative z-index children";
+
+    if (reasons & CompositingReasonTransformWithCompositedDescendants)
+        return "transform with composited descendants";
+
+    if (reasons & CompositingReasonOpacityWithCompositedDescendants)
+        return "opacity with composited descendants";
+
+    if (reasons & CompositingReasonMaskWithCompositedDescendants)
+        return "mask with composited descendants";
+
+    if (reasons & CompositingReasonReflectionWithCompositedDescendants)
+        return "reflection with composited descendants";
+
+    if (reasons & CompositingReasonFilterWithCompositedDescendants)
+        return "filter with composited descendants";
+            
+    if (reasons & CompositingReasonBlendingWithCompositedDescendants)
+        return "blending with composited descendants";
+
+    if (reasons & CompositingReasonPerspective)
         return "perspective";
 
-    if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPreserve3D)
+    if (reasons & CompositingReasonPreserve3D)
         return "preserve-3d";
 
-    if (inCompositingMode() && layer->isRootLayer())
+    if (reasons & CompositingReasonRoot)
         return "root";
-
-    return "";
 }
 #endif
 

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (143690 => 143691)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2013-02-22 06:25:44 UTC (rev 143690)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2013-02-22 06:33:52 UTC (rev 143691)
@@ -55,6 +55,35 @@
     CompositingUpdateOnCompositedScroll
 };
 
+enum {
+    CompositingReasonNone                                   = 0,
+    CompositingReason3DTransform                            = 1 << 0,
+    CompositingReasonVideo                                  = 1 << 1,
+    CompositingReasonCanvas                                 = 1 << 2,
+    CompositingReasonPlugin                                 = 1 << 3,
+    CompositingReasonIFrame                                 = 1 << 4,
+    CompositingReasonBackfaceVisibilityHidden               = 1 << 5,
+    CompositingReasonClipsCompositingDescendants            = 1 << 6,
+    CompositingReasonAnimation                              = 1 << 7,
+    CompositingReasonFilters                                = 1 << 8,
+    CompositingReasonPositionFixed                          = 1 << 9,
+    CompositingReasonPositionSticky                         = 1 << 10,
+    CompositingReasonOverflowScrollingTouch                 = 1 << 11,
+    CompositingReasonStacking                               = 1 << 12,
+    CompositingReasonOverlap                                = 1 << 13,
+    CompositingReasonNegativeZIndexChildren                 = 1 << 14,
+    CompositingReasonTransformWithCompositedDescendants     = 1 << 15,
+    CompositingReasonOpacityWithCompositedDescendants       = 1 << 16,
+    CompositingReasonMaskWithCompositedDescendants          = 1 << 17,
+    CompositingReasonReflectionWithCompositedDescendants    = 1 << 18,
+    CompositingReasonFilterWithCompositedDescendants        = 1 << 19,
+    CompositingReasonBlendingWithCompositedDescendants      = 1 << 20,
+    CompositingReasonPerspective                            = 1 << 21,
+    CompositingReasonPreserve3D                             = 1 << 22,
+    CompositingReasonRoot                                   = 1 << 23
+};
+typedef unsigned CompositingReasons;
+
 // RenderLayerCompositor manages the hierarchy of
 // composited RenderLayers. It determines which RenderLayers
 // become compositing, and creates and maintains a hierarchy of
@@ -341,10 +370,12 @@
 #endif
 
 #if !LOG_DISABLED
-    const char* reasonForCompositing(const RenderLayer*);
+    const char* logReasonsForCompositing(const RenderLayer*);
     void logLayerInfo(const RenderLayer*, int depth);
 #endif
 
+    CompositingReasons reasonsForCompositing(const RenderLayer*) const;
+
 private:
     RenderView* m_renderView;
     OwnPtr<GraphicsLayer> m_rootContentLayer;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to