Index: Source/core/rendering/RenderLayerCompositor.cpp |
diff --git a/Source/core/rendering/RenderLayerCompositor.cpp b/Source/core/rendering/RenderLayerCompositor.cpp |
index 5086bf0565a519c69586194f462a344dd3a44dc7..5f7b4ab1229906167ddc7693dfacb90864c32f86 100644 |
--- a/Source/core/rendering/RenderLayerCompositor.cpp |
+++ b/Source/core/rendering/RenderLayerCompositor.cpp |
@@ -1527,6 +1527,7 @@ bool RenderLayerCompositor::requiresOwnBackingStore(const RenderLayer* layer, co |
|| requiresCompositingForFrame(renderer) |
|| requiresCompositingForBackfaceVisibilityHidden(renderer) |
|| requiresCompositingForAnimation(renderer) |
+ || requiresCompositingForTransition(renderer) |
|| requiresCompositingForFilters(renderer) |
|| requiresCompositingForBlending(renderer) |
|| requiresCompositingForPosition(renderer, layer) |
@@ -1575,6 +1576,9 @@ CompositingReasons RenderLayerCompositor::directReasonsForCompositing(const Rend |
if (requiresCompositingForAnimation(renderer)) |
directReasons |= CompositingReasonAnimation; |
+ if (requiresCompositingForTransition(renderer)) |
+ directReasons |= CompositingReasonTransition; |
+ |
if (requiresCompositingForFilters(renderer)) |
directReasons |= CompositingReasonFilters; |
@@ -1629,6 +1633,9 @@ const char* RenderLayerCompositor::logReasonsForCompositing(const RenderLayer* l |
if (reasons & CompositingReasonAnimation) |
return "animation"; |
+ if (reasons & CompositingReasonTransition) |
+ return "transition"; |
+ |
if (reasons & CompositingReasonFilters) |
return "filters"; |
@@ -1842,6 +1849,21 @@ bool RenderLayerCompositor::requiresCompositingForAnimation(RenderObject* render |
return false; |
} |
+bool RenderLayerCompositor::requiresCompositingForTransition(RenderObject* renderer) const |
+{ |
+ if (!(m_compositingTriggers & ChromeClient::AnimationTrigger)) |
+ return false; |
+ |
+ if (Settings* settings = m_renderView->document()->settings()) { |
+ if (!settings->acceleratedCompositingForTransitionEnabled()) |
+ return false; |
+ } |
+ |
+ return renderer->style()->transitionForProperty(CSSPropertyOpacity) |
+ || renderer->style()->transitionForProperty(CSSPropertyWebkitFilter) |
+ || renderer->style()->transitionForProperty(CSSPropertyWebkitTransform); |
+} |
+ |
CompositingReasons RenderLayerCompositor::subtreeReasonsForCompositing(RenderObject* renderer, bool hasCompositedDescendants, bool has3DTransformedDescendants) const |
{ |
CompositingReasons subtreeReasons = CompositingReasonNone; |