WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-110505-20130222091237.patch (text/plain), 12.59 KB, created by
Antoine Quint
on 2013-02-22 09:16:19 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Antoine Quint
Created:
2013-02-22 09:16:19 PST
Size:
12.59 KB
patch
obsolete
>Subversion Revision: 143727 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 197cafbac65abeed5246982d9216d5b2ef585c4c..15549a82e44d6994be65ec4dfbc06531ef209ff6 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,29 @@ >+2013-02-22 Antoine Quint <graouts@apple.com> >+ >+ 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 NOBODY (OOPS!). >+ >+ No new tests. >+ >+ * rendering/RenderLayerCompositor.cpp: >+ (WebCore::RenderLayerCompositor::logLayerInfo): >+ (WebCore::RenderLayerCompositor::reasonsForCompositing): >+ (WebCore): >+ (WebCore::RenderLayerCompositor::logReasonsForCompositing): >+ * rendering/RenderLayerCompositor.h: >+ (RenderLayerCompositor): >+ > 2013-02-22 Allan Sandfeld Jensen <allan.jensen@digia.com> > > Allow child-frame content in hit-tests. >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp >index f325ac85ec0865340d7ad22e98d146c47190127a..a1037c12c1f2a2e4c85223f3a5b04f7f2f754040 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp >+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp >@@ -578,7 +578,7 @@ void RenderLayerCompositor::logLayerInfo(const RenderLayer* layer, int depth) > > 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 @@ bool RenderLayerCompositor::requiresOwnBackingStore(const RenderLayer* layer, co > 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,74 +1727,148 @@ const char* RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer > } > > 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 (inCompositingMode() && layer->isRootLayer()) >+ reasons |= CompositingReasonRoot; >+ >+ return reasons; >+} >+ >+#if !LOG_DISABLED >+const char* RenderLayerCompositor::logReasonsForCompositing(const RenderLayer* layer) >+{ >+ CompositingReasons reasons = reasonsForCompositing(layer); >+ >+ if (reasons & CompositingReason3DTransform) >+ return "3D transform"; >+ >+ if (reasons & CompositingReasonVideo) >+ return "video"; > >- if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPerspective) >+ 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 ""; >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.h b/Source/WebCore/rendering/RenderLayerCompositor.h >index c6f4ca86ccbd8b33bd47c38253e43f5399bd6b12..293ab98853f351aa67e57e5b3f748a08218898f6 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.h >+++ b/Source/WebCore/rendering/RenderLayerCompositor.h >@@ -55,6 +55,35 @@ enum CompositingUpdateType { > 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 >@@ -237,6 +266,8 @@ public: > void setShouldReevaluateCompositingAfterLayout() { m_reevaluateCompositingAfterLayout = true; } > > bool viewHasTransparentBackground(Color* backgroundColor = 0) const; >+ >+ CompositingReasons reasonsForCompositing(const RenderLayer*) const; > > private: > class OverlapMap; >@@ -341,7 +372,7 @@ private: > #endif > > #if !LOG_DISABLED >- const char* reasonForCompositing(const RenderLayer*); >+ const char* logReasonsForCompositing(const RenderLayer*); > void logLayerInfo(const RenderLayer*, int depth); > #endif >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 110505
:
189582
|
189769
| 189781