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-20130221125923.patch (text/plain), 12.54 KB, created by
Antoine Quint
on 2013-02-21 13:03:03 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Antoine Quint
Created:
2013-02-21 13:03:03 PST
Size:
12.54 KB
patch
obsolete
>Subversion Revision: 143248 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 8a583fea82ea25bebbf6e5f2a051d8821e7639d4..237ff72a8d54ca934ab7114067fc047af541171e 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,29 @@ >+2013-02-21 Antoine Quint <graouts@apple.com> >+ >+ Expose a list of all reasons that qualify a RenderLayer to be compositedd >+ 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::reasonForCompositing): >+ (WebCore): >+ (WebCore::RenderLayerCompositor::logReasonForCompositing): >+ * rendering/RenderLayerCompositor.h: >+ (RenderLayerCompositor): >+ > 2013-02-18 Sheriff Bot <webkit.review.bot@gmail.com> > > Unreviewed, rolling out r143145. >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp >index 0437330d7fce51ecde125f9729b3adab128de957..fe6fdb87ba66fea8ae7ae0a896a4bfba17c04d40 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp >+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp >@@ -564,7 +564,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()); >+ logReasonForCompositing(layer), layer->name().utf8().data()); > } > #endif > >@@ -1700,9 +1700,13 @@ bool RenderLayerCompositor::requiresOwnBackingStore(const RenderLayer* layer, co > return false; > } > >-#if !LOG_DISABLED >-const char* RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer) >+CompositingReason RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer) > { >+ CompositingReason reason = CompositingReasonNone; >+ >+ if (!layer || !layer->isComposited()) >+ return reason; >+ > RenderObject* renderer = layer->renderer(); > if (layer->isReflection()) { > renderer = renderer->parent(); >@@ -1710,77 +1714,152 @@ const char* RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer > } > > if (requiresCompositingForTransform(renderer)) >- return "3D transform"; >+ reason |= CompositingReason3DTransform; > > if (requiresCompositingForVideo(renderer)) >- return "video"; >+ reason |= CompositingReasonVideo; > > if (requiresCompositingForCanvas(renderer)) >- return "canvas"; >+ reason |= CompositingReasonCanvas; > > if (requiresCompositingForPlugin(renderer)) >- return "plugin"; >+ reason |= CompositingReasonPlugin; > > if (requiresCompositingForFrame(renderer)) >- return "iframe"; >+ reason |= CompositingReasonIFrame; > > if ((canRender3DTransforms() && renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden)) >- return "backface-visibility: hidden"; >+ reason |= CompositingReasonBackfaceVisibilityHidden; > > if (clipsCompositingDescendants(layer)) >- return "clips compositing descendants"; >+ reason |= CompositingReasonClipsCompositingDescendants; > > if (requiresCompositingForAnimation(renderer)) >- return "animation"; >+ reason |= CompositingReasonAnimation; > > if (requiresCompositingForFilters(renderer)) >- return "filters"; >+ reason |= CompositingReasonFilters; > > if (requiresCompositingForPosition(renderer, layer)) >- return renderer->style()->position() == FixedPosition ? "position: fixed" : "position: sticky"; >+ reason |= renderer->style()->position() == FixedPosition ? CompositingReasonPositionFixed : CompositingReasonPositionSticky; > > if (requiresCompositingForOverflowScrolling(layer)) >- return "-webkit-overflow-scrolling: touch"; >+ reason |= 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) { >+ reason |= CompositingReasonStacking; >+ else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForOverlap) >+ reason |= CompositingReasonOverlap; >+ else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForBackgroundLayer) >+ reason |= CompositingReasonNegativeZIndexChildren; >+ else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForGraphicalEffect) { > if (layer->transform()) >- return "transform with composited descendants"; >+ reason |= CompositingReasonTransformWithCompositedDescendants; > > if (renderer->isTransparent()) >- return "opacity with composited descendants"; >+ reason |= CompositingReasonOpacityWithCompositedDescendants; > > if (renderer->hasMask()) >- return "mask with composited descendants"; >+ reason |= CompositingReasonMaskWithCompositedDescendants; > > if (renderer->hasReflection()) >- return "reflection with composited descendants"; >+ reason |= CompositingReasonReflectionWithCompositedDescendants; > > if (renderer->hasFilter()) >- return "filter with composited descendants"; >+ reason |= CompositingReasonFilterWithCompositedDescendants; > > if (renderer->hasBlendMode()) >- return "blending with composited descendants"; >- } >+ reason |= CompositingReasonBlendingWithCompositedDescendants; >+ } else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPerspective) >+ reason |= CompositingReasonPerspective; >+ else if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPreserve3D) >+ reason |= CompositingReasonPreserve3D; >+ >+ if (inCompositingMode() && layer->isRootLayer()) >+ reason |= CompositingReasonRoot; >+ >+ return reason; >+} >+ >+#if !LOG_DISABLED >+const char* RenderLayerCompositor::logReasonForCompositing(const RenderLayer* layer) >+{ >+ CompositingReason reason = reasonForCompositing(layer); >+ >+ if (!reason) >+ return ""; >+ >+ if (reason & CompositingReason3DTransform) >+ return "3D transform"; >+ >+ if (reason & CompositingReasonVideo) >+ return "video"; > >- if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPerspective) >+ if (reason & CompositingReasonCanvas) >+ return "canvas"; >+ >+ if (reason & CompositingReasonPlugin) >+ return "plugin"; >+ >+ if (reason & CompositingReasonIFrame) >+ return "iframe"; >+ >+ if (reason & CompositingReasonBackfaceVisibilityHidden) >+ return "backface-visibility: hidden"; >+ >+ if (reason & CompositingReasonClipsCompositingDescendants) >+ return "clips compositing descendants"; >+ >+ if (reason & CompositingReasonAnimation) >+ return "animation"; >+ >+ if (reason & CompositingReasonFilters) >+ return "filters"; >+ >+ if (reason & CompositingReasonPositionFixed) >+ return "position: fixed"; >+ >+ if (reason & CompositingReasonPositionSticky) >+ return "position: sticky"; >+ >+ if (reason & CompositingReasonOverflowScrollingTouch) >+ return "-webkit-overflow-scrolling: touch"; >+ >+ if (reason & CompositingReasonStacking) >+ return "stacking"; >+ >+ if (reason & CompositingReasonOverlap) >+ return "overlap"; >+ >+ if (reason & CompositingReasonNegativeZIndexChildren) >+ return "negative z-index children"; >+ >+ if (reason & CompositingReasonTransformWithCompositedDescendants) >+ return "transform with composited descendants"; >+ >+ if (reason & CompositingReasonOpacityWithCompositedDescendants) >+ return "opacity with composited descendants"; >+ >+ if (reason & CompositingReasonMaskWithCompositedDescendants) >+ return "mask with composited descendants"; >+ >+ if (reason & CompositingReasonReflectionWithCompositedDescendants) >+ return "reflection with composited descendants"; >+ >+ if (reason & CompositingReasonFilterWithCompositedDescendants) >+ return "filter with composited descendants"; >+ >+ if (reason & CompositingReasonBlendingWithCompositedDescendants) >+ return "blending with composited descendants"; >+ >+ if (reason & CompositingReasonPerspective) > return "perspective"; > >- if (layer->indirectCompositingReason() == RenderLayer::IndirectCompositingForPreserve3D) >+ if (reason & CompositingReasonPreserve3D) > return "preserve-3d"; > >- if (inCompositingMode() && layer->isRootLayer()) >+ if (reason & CompositingReasonRoot) > return "root"; >- >- return ""; > } > #endif > >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.h b/Source/WebCore/rendering/RenderLayerCompositor.h >index cbe1d9b6b2757cc255eca018f38363db387c3ea9..b9073cbb29f924627b3e4cc204cf7d6004245227 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 CompositingReason; >+ > // 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 reportMemoryUsage(MemoryObjectInfo*) const; > void setShouldReevaluateCompositingAfterLayout() { m_reevaluateCompositingAfterLayout = true; } > >+ CompositingReason reasonForCompositing(const RenderLayer*); >+ > private: > class OverlapMap; > >@@ -339,7 +370,7 @@ private: > #endif > > #if !LOG_DISABLED >- const char* reasonForCompositing(const RenderLayer*); >+ const char* logReasonForCompositing(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