diff options
author | Ben Murdoch <benm@google.com> | 2011-01-06 21:36:31 +0000 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-01-07 10:36:05 +0000 |
commit | 4a156157940f51b91eadd76f6c86f862ec0a1da0 (patch) | |
tree | ee905fa007e14522848f571215c1054734db9269 /WebCore/rendering/RenderLayerCompositor.cpp | |
parent | 21d8d81a756ca7e60b5131e5f1006f52799179b0 (diff) | |
download | external_webkit-4a156157940f51b91eadd76f6c86f862ec0a1da0.zip external_webkit-4a156157940f51b91eadd76f6c86f862ec0a1da0.tar.gz external_webkit-4a156157940f51b91eadd76f6c86f862ec0a1da0.tar.bz2 |
Merge WebKit at Chromium 9.0.597.55: trivial merge by git
Change-Id: I2c6f2ebc4431d15ac82b5b1a9f08159e1731bc57
Diffstat (limited to 'WebCore/rendering/RenderLayerCompositor.cpp')
-rw-r--r-- | WebCore/rendering/RenderLayerCompositor.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp index e6ea32a..638c628 100644 --- a/WebCore/rendering/RenderLayerCompositor.cpp +++ b/WebCore/rendering/RenderLayerCompositor.cpp @@ -100,6 +100,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView) , m_rootPlatformLayer(0) , m_updateCompositingLayersTimer(this, &RenderLayerCompositor::updateCompositingLayersTimerFired) , m_hasAcceleratedCompositing(true) + , m_compositingTriggers(static_cast<ChromeClient::CompositingTriggerFlags>(ChromeClient::AllTriggers)) , m_showDebugBorders(false) , m_showRepaintCounter(false) , m_compositingConsultsOverlap(true) @@ -136,7 +137,7 @@ void RenderLayerCompositor::cacheAcceleratedCompositingFlags() bool hasAcceleratedCompositing = false; bool showDebugBorders = false; bool showRepaintCounter = false; - + if (Settings* settings = m_renderView->document()->settings()) { hasAcceleratedCompositing = settings->acceleratedCompositingEnabled(); showDebugBorders = settings->showDebugBorders(); @@ -148,18 +149,26 @@ void RenderLayerCompositor::cacheAcceleratedCompositingFlags() if (hasAcceleratedCompositing) { Frame* frame = m_renderView->frameView()->frame(); Page* page = frame ? frame->page() : 0; - if (page) - hasAcceleratedCompositing = page->chrome()->client()->allowsAcceleratedCompositing(); + if (page) { + ChromeClient* chromeClient = page->chrome()->client(); + m_compositingTriggers = chromeClient->allowedCompositingTriggers(); + hasAcceleratedCompositing = m_compositingTriggers; + } } if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter) setCompositingLayersNeedRebuild(); - + m_hasAcceleratedCompositing = hasAcceleratedCompositing; m_showDebugBorders = showDebugBorders; m_showRepaintCounter = showRepaintCounter; } +bool RenderLayerCompositor::canRender3DTransforms() const +{ + return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger); +} + void RenderLayerCompositor::setCompositingLayersNeedRebuild(bool needRebuild) { if (inCompositingMode()) @@ -1223,7 +1232,7 @@ bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) c || requiresCompositingForCanvas(renderer) || requiresCompositingForPlugin(renderer) || requiresCompositingForIFrame(renderer) - || renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden + || (canRender3DTransforms() && renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden) || clipsCompositingDescendants(layer) || requiresCompositingForAnimation(renderer); } @@ -1279,6 +1288,9 @@ bool RenderLayerCompositor::clipsCompositingDescendants(const RenderLayer* layer bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* renderer) const { + if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) + return false; + RenderStyle* style = renderer->style(); // Note that we ask the renderer if it has a transform, because the style may have transforms, // but the renderer may be an inline that doesn't suppport them. @@ -1287,6 +1299,8 @@ bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* render bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer) const { + if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) + return false; #if ENABLE(VIDEO) if (renderer->isVideo()) { RenderVideo* video = toRenderVideo(renderer); @@ -1313,6 +1327,9 @@ bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer) bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer) const { + if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) + return false; + if (renderer->isCanvas()) { HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node()); return canvas->renderingContext() && canvas->renderingContext()->isAccelerated(); @@ -1322,6 +1339,9 @@ bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer) bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const { + if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) + return false; + bool composite = (renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing()) || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing()); if (!composite) @@ -1366,6 +1386,9 @@ bool RenderLayerCompositor::requiresCompositingForIFrame(RenderObject* renderer) bool RenderLayerCompositor::requiresCompositingForAnimation(RenderObject* renderer) const { + if (!(m_compositingTriggers & ChromeClient::AnimationTrigger)) + return false; + if (AnimationController* animController = renderer->animation()) { return (animController->isRunningAnimationOnRenderer(renderer, CSSPropertyOpacity) && inCompositingMode()) || animController->isRunningAnimationOnRenderer(renderer, CSSPropertyWebkitTransform); |