summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2012-01-13 11:43:37 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2012-01-13 11:43:37 -0800
commit124446075161928aaa2ce278592c5f8f0616b238 (patch)
tree2efdf1d11096f9631fceebe08e91c49365a1a74b
parent394a469b587f5c61cdb9718b41e8a66c0375fcad (diff)
parent03eb77527d30a22d267944a86c9336351d6020b5 (diff)
downloadexternal_webkit-124446075161928aaa2ce278592c5f8f0616b238.zip
external_webkit-124446075161928aaa2ce278592c5f8f0616b238.tar.gz
external_webkit-124446075161928aaa2ce278592c5f8f0616b238.tar.bz2
am 03eb7752: am 3c049d2a: Prevent infinite loop when turning on then off composited mode
* commit '03eb77527d30a22d267944a86c9336351d6020b5': Prevent infinite loop when turning on then off composited mode
-rw-r--r--Source/WebCore/rendering/RenderLayerCompositor.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp
index 1ef3b77..33bf2f7 100644
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp
@@ -1366,7 +1366,21 @@ bool RenderLayerCompositor::needsToBeComposited(const RenderLayer* layer) const
return false;
// The root layer always has a compositing layer, but it may not have backing.
+#if PLATFORM(ANDROID)
+ // If we do not have a root platform layer, don't use the
+ // mustOverlapCompositedLayers() as a cue that this layer needs to be
+ // composited -- the layers tree has been detached.
+ // Otherwise we can end up in a cycle where updateBacking() switches composited
+ // mode on because a layer has mustOverlapCompositedLayers() (by calling
+ // enableCompositingMode()), while computeCompositingRequirements() will
+ // (correctly) say that we do not need to be in composited mode and turns it
+ // off, rince and repeat...
+ return requiresCompositingLayer(layer)
+ || (m_rootPlatformLayer && layer->mustOverlapCompositedLayers())
+ || (inCompositingMode() && layer->isRootLayer());
+#else
return requiresCompositingLayer(layer) || layer->mustOverlapCompositedLayers() || (inCompositingMode() && layer->isRootLayer());
+#endif
}
#if PLATFORM(ANDROID)