summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Roard <nicolas@android.com>2010-03-31 07:00:25 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-03-31 07:00:25 -0700
commit541a0a9acd01f49d79f8ec2600bcd9f2c2c1bed0 (patch)
treea75e9f42dacbfe3ec65e93b426b535bfcca72c22
parent1dd519bd5e9b805a25b9c57fd56ff0d39388f59a (diff)
parentb0e2ffc4c15b8ea84d6c3c52fce74580afb875ec (diff)
downloadexternal_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.cpp57
-rw-r--r--WebCore/rendering/RenderLayerCompositor.h5
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;