diff options
author | Nicolas Roard <nicolasroard@google.com> | 2012-01-12 17:29:34 -0800 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2012-01-12 17:29:34 -0800 |
commit | 3c049d2aded213c7bcc49cdb7283cf0fcb509644 (patch) | |
tree | c885b0866cb13b8e871dc72db6afd4663f67ca5d /Source/WebCore/rendering/RenderLayerCompositor.cpp | |
parent | b627d5bd0e9b9a4d02131ef694467bfb62b9fb7f (diff) | |
download | external_webkit-3c049d2aded213c7bcc49cdb7283cf0fcb509644.zip external_webkit-3c049d2aded213c7bcc49cdb7283cf0fcb509644.tar.gz external_webkit-3c049d2aded213c7bcc49cdb7283cf0fcb509644.tar.bz2 |
Prevent infinite loop when turning on then off composited mode
bug:5820635
Change-Id: I24b6eae6c76c29e44106b4ec87e74d945aad7b1b
Diffstat (limited to 'Source/WebCore/rendering/RenderLayerCompositor.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderLayerCompositor.cpp | 14 |
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) |