diff options
author | Mangesh Ghiware <mghiware@google.com> | 2012-04-25 13:12:41 -0700 |
---|---|---|
committer | Mangesh Ghiware <mghiware@google.com> | 2012-04-25 13:12:41 -0700 |
commit | 87431609180dfb277a94cb8b81554e8bd2ef355d (patch) | |
tree | 5f209ee289b45c771101065684b5a27de698b9d0 /Source | |
parent | 2ad54828a335c8e7337ab1f1077253689630a6d2 (diff) | |
download | external_webkit-87431609180dfb277a94cb8b81554e8bd2ef355d.zip external_webkit-87431609180dfb277a94cb8b81554e8bd2ef355d.tar.gz external_webkit-87431609180dfb277a94cb8b81554e8bd2ef355d.tar.bz2 |
Fix crash in RenderLayerCompositor::updateCompositingLayers
Don't enable composited layers for fixed elements with a width or height
of 1 or less. This duplicates the check used for deciding if layers
following fixed layers are composited or not.
This fixes the scenario where updateBacking() switches composited mode
on (by calling enableCompositingMode()) because a layer is fixed, while
computeCompositingRequirements() will disable it, and results in a
segfault in updateCompositingLayers()
Bug: 6324603
Change-Id: I034f2bd2f1a84fc24de6ab359c07f4895e2c7121
Diffstat (limited to 'Source')
-rw-r--r-- | Source/WebCore/rendering/RenderLayerCompositor.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp index 6b669e8..7d70533 100644 --- a/Source/WebCore/rendering/RenderLayerCompositor.cpp +++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp @@ -1425,8 +1425,13 @@ bool RenderLayerCompositor::requiresCompositingForAndroidLayers(const RenderLaye #if ENABLE(COMPOSITED_FIXED_ELEMENTS) // Enable composited layers (for fixed elements) - if (layer->isFixed()) - return true; + if (layer->isFixed()) { + // Skip fixed layers with a width or height of 1 or less... + IntRect bounds = layer->renderer()->localToAbsoluteQuad( + FloatRect(layer->localBoundingBox())).enclosingBoundingBox(); + if (bounds.width() > 1 && bounds.height() > 1) + return true; + } #endif if (layer->renderer()->isCanvas()) |