Index: Source/core/rendering/compositing/CompositingReasonFinder.cpp |
diff --git a/Source/core/rendering/compositing/CompositingReasonFinder.cpp b/Source/core/rendering/compositing/CompositingReasonFinder.cpp |
index a65ae9056e53ac1b3842a3553ee70e436c62d7c9..435104343db7ee6d010dbe440d683c1f5ddeeed8 100644 |
--- a/Source/core/rendering/compositing/CompositingReasonFinder.cpp |
+++ b/Source/core/rendering/compositing/CompositingReasonFinder.cpp |
@@ -34,7 +34,7 @@ namespace WebCore { |
CompositingReasonFinder::CompositingReasonFinder(RenderView& renderView) |
: m_renderView(renderView) |
- , m_compositingTriggers(static_cast<ChromeClient::CompositingTriggerFlags>(ChromeClient::AllTriggers)) |
+ , m_compositingTriggers(static_cast<CompositingTriggerFlags>(AllCompositingTriggers)) |
{ |
} |
@@ -45,12 +45,12 @@ void CompositingReasonFinder::updateTriggers() |
bool CompositingReasonFinder::has3DTransformTrigger() const |
{ |
- return m_compositingTriggers & ChromeClient::ThreeDTransformTrigger; |
+ return m_compositingTriggers & ThreeDTransformTrigger; |
} |
bool CompositingReasonFinder::hasAnimationTrigger() const |
{ |
- return m_compositingTriggers & ChromeClient::AnimationTrigger; |
+ return m_compositingTriggers & AnimationTrigger; |
} |
bool CompositingReasonFinder::isMainFrame() const |
@@ -68,11 +68,8 @@ CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay |
directReasons |= CompositingReason3DTransform; |
// Only zero or one of the following conditions will be true for a given RenderLayer. |
- if (requiresCompositingForVideo(renderer)) |
- directReasons |= CompositingReasonVideo; |
- else if (requiresCompositingForCanvas(renderer)) |
- directReasons |= CompositingReasonCanvas; |
- else if (requiresCompositingForPlugin(renderer, needToRecomputeCompositingRequirements)) |
+ // FIXME: These should be handled by overrides of RenderObject::additionalCompositingReasons. |
+ if (requiresCompositingForPlugin(renderer, needToRecomputeCompositingRequirements)) |
directReasons |= CompositingReasonPlugin; |
else if (requiresCompositingForFrame(renderer, needToRecomputeCompositingRequirements)) |
directReasons |= CompositingReasonIFrame; |
@@ -104,6 +101,8 @@ CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay |
if (requiresCompositingForWillChange(renderer)) |
directReasons |= CompositingReasonWillChange; |
+ directReasons |= renderer->additionalCompositingReasons(m_compositingTriggers); |
+ |
return directReasons; |
} |
@@ -114,7 +113,7 @@ bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const |
if (isMainFrame()) |
return false; |
- if (!(m_compositingTriggers & ChromeClient::ScrollableInnerFrameTrigger)) |
+ if (!(m_compositingTriggers & ScrollableInnerFrameTrigger)) |
return false; |
FrameView* frameView = m_renderView.frameView(); |
@@ -123,7 +122,7 @@ bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const |
bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* renderer) const |
{ |
- if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) |
+ if (!(m_compositingTriggers & ThreeDTransformTrigger)) |
return false; |
RenderStyle* style = renderer->style(); |
@@ -132,39 +131,9 @@ bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend |
return renderer->hasTransform() && style->transform().has3DOperation(); |
} |
-bool CompositingReasonFinder::requiresCompositingForVideo(RenderObject* renderer) const |
-{ |
- if (RuntimeEnabledFeatures::overlayFullscreenVideoEnabled() && renderer->isVideo()) { |
- HTMLMediaElement* media = toHTMLMediaElement(renderer->node()); |
- if (media->isFullscreen()) |
- return true; |
- } |
- |
- if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) |
- return false; |
- |
- if (renderer->isVideo()) { |
- RenderVideo* video = toRenderVideo(renderer); |
- return video->shouldDisplayVideo() && video->supportsAcceleratedRendering(); |
- } |
- return false; |
-} |
- |
-bool CompositingReasonFinder::requiresCompositingForCanvas(RenderObject* renderer) const |
-{ |
- if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) |
- return false; |
- |
- if (renderer->isCanvas()) { |
- HTMLCanvasElement* canvas = toHTMLCanvasElement(renderer->node()); |
- return canvas->renderingContext() && canvas->renderingContext()->isAccelerated(); |
- } |
- return false; |
-} |
- |
bool CompositingReasonFinder::requiresCompositingForPlugin(RenderObject* renderer, bool* needToRecomputeCompositingRequirements) const |
{ |
- if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) |
+ if (!(m_compositingTriggers & PluginTrigger)) |
return false; |
if (!renderer->isEmbeddedObject() || !toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing()) |
@@ -214,7 +183,7 @@ bool CompositingReasonFinder::requiresCompositingForFrame(RenderObject* renderer |
bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(RenderObject* renderer) const |
{ |
- if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) |
+ if (!(m_compositingTriggers & ThreeDTransformTrigger)) |
return false; |
return renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden; |
@@ -222,7 +191,7 @@ bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(Ren |
bool CompositingReasonFinder::requiresCompositingForAnimation(RenderObject* renderer) const |
{ |
- if (!(m_compositingTriggers & ChromeClient::AnimationTrigger)) |
+ if (!(m_compositingTriggers & AnimationTrigger)) |
return false; |
return shouldCompositeForActiveAnimations(*renderer); |
@@ -230,7 +199,7 @@ bool CompositingReasonFinder::requiresCompositingForAnimation(RenderObject* rend |
bool CompositingReasonFinder::requiresCompositingForTransition(RenderObject* renderer) const |
{ |
- if (!(m_compositingTriggers & ChromeClient::AnimationTrigger)) |
+ if (!(m_compositingTriggers & AnimationTrigger)) |
return false; |
if (Settings* settings = m_renderView.document().settings()) { |
@@ -245,7 +214,7 @@ bool CompositingReasonFinder::requiresCompositingForTransition(RenderObject* ren |
bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* renderer) const |
{ |
- if (!(m_compositingTriggers & ChromeClient::FilterTrigger)) |
+ if (!(m_compositingTriggers & FilterTrigger)) |
return false; |
return renderer->hasFilter(); |