diff options
author | Nicolas Roard <nicolas@android.com> | 2010-03-31 07:00:25 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-03-31 07:00:25 -0700 |
commit | 541a0a9acd01f49d79f8ec2600bcd9f2c2c1bed0 (patch) | |
tree | a75e9f42dacbfe3ec65e93b426b535bfcca72c22 | |
parent | 1dd519bd5e9b805a25b9c57fd56ff0d39388f59a (diff) | |
parent | b0e2ffc4c15b8ea84d6c3c52fce74580afb875ec (diff) | |
download | external_webkit-541a0a9acd01f49d79f8ec2600bcd9f2c2c1bed0.zip external_webkit-541a0a9acd01f49d79f8ec2600bcd9f2c2c1bed0.tar.gz external_webkit-541a0a9acd01f49d79f8ec2600bcd9f2c2c1bed0.tar.bz2 |
Merge "Only allows composited layers if not in iframes" into froyo
-rw-r--r-- | WebCore/rendering/RenderLayerCompositor.cpp | 57 | ||||
-rw-r--r-- | WebCore/rendering/RenderLayerCompositor.h | 5 |
2 files changed, 47 insertions, 15 deletions
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp index e8d476b..22118fe 100644 --- a/WebCore/rendering/RenderLayerCompositor.cpp +++ b/WebCore/rendering/RenderLayerCompositor.cpp @@ -982,14 +982,49 @@ bool RenderLayerCompositor::needsToBeComposited(const RenderLayer* layer) const return requiresCompositingLayer(layer) || layer->mustOverlapCompositedLayers(); } +#if PLATFORM(ANDROID) +bool RenderLayerCompositor::requiresCompositingForMobileSites(const RenderLayer* layer) const +{ + // First, check if we are in an iframe, and if so bail out + if (m_renderView->document()->frame()->tree()->parent()) + return false; + + RenderObject* renderer = layer->renderer(); + // Check for transforms + if (requiresCompositingForTransform(renderer)) + return true; + + // Check for animations + if (requiresCompositingForAnimation(renderer)) + return true; + +#if ENABLE(COMPOSITED_FIXED_ELEMENTS) + // For the moment, we want to only enable fixed composited layers on mobile websites. + // We can consider a website as being a 'mobile' site if all the + // following checks are true: + // 1) - the viewport width is either undefined (-1) or equal to device-width (0), and + // 2) - no scaling is allowed + if (!layer->isFixed()) + return false; + + Settings* settings = m_renderView->document()->settings(); + if (!settings) + return false; + + if ((settings->viewportWidth() == -1 || settings->viewportWidth() == 0) && + !settings->viewportUserScalable()) + return true; +#endif + + return false; +} +#endif + // Note: this specifies whether the RL needs a compositing layer for intrinsic reasons. // Use needsToBeComposited() to determine if a RL actually needs a compositing layer. // static bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) const { -#if ENABLE(COMPOSITED_FIXED_ELEMENTS) - Settings* settings = m_renderView->document()->settings(); -#endif RenderObject* renderer = layer->renderer(); // The compositing state of a reflection should match that of its reflected layer. if (layer->isReflection()) { @@ -998,25 +1033,17 @@ bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) c } // The root layer always has a compositing layer, but it may not have backing. return (inCompositingMode() && layer->isRootLayer()) || - requiresCompositingForTransform(renderer) || #if PLATFORM(ANDROID) -#if ENABLE(COMPOSITED_FIXED_ELEMENTS) - // For the moment, we want to only enable fixed composited layers on mobile websites. - // We can consider a website as being a 'mobile' site if all the - // following checks are true: - // 1) - the viewport width is either undefined (-1) or equal to device-width (0), and - // 2) - no scaling is allowed - (((settings->viewportWidth() == -1) || (settings->viewportWidth() == 0)) && - !settings->viewportUserScalable() && layer->isFixed()) || -#endif + requiresCompositingForMobileSites(layer) || #else + requiresCompositingForTransform(renderer) || requiresCompositingForVideo(renderer) || requiresCompositingForCanvas(renderer) || requiresCompositingForPlugin(renderer) || + requiresCompositingForAnimation(renderer) || #endif renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden || - clipsCompositingDescendants(layer) || - requiresCompositingForAnimation(renderer); + clipsCompositingDescendants(layer); } // Return true if the given layer has some ancestor in the RenderLayer hierarchy that clips, diff --git a/WebCore/rendering/RenderLayerCompositor.h b/WebCore/rendering/RenderLayerCompositor.h index 5f1a178..eeacdf7 100644 --- a/WebCore/rendering/RenderLayerCompositor.h +++ b/WebCore/rendering/RenderLayerCompositor.h @@ -181,6 +181,11 @@ private: bool requiresCompositingForPlugin(RenderObject*) const; bool requiresCompositingWhenDescendantsAreCompositing(RenderObject*) const; +#if PLATFORM(ANDROID) + // Whether we are on a mobile site + bool requiresCompositingForMobileSites(const RenderLayer* layer) const; +#endif + private: RenderView* m_renderView; OwnPtr<GraphicsLayer> m_rootPlatformLayer; |