summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Fraser <simon.fraser@apple.com>2014-04-14 12:16:32 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-16 05:55:03 +0200
commit7b1f8c369100f57861ad8054d17a04da8b604203 (patch)
tree3f667df923823afe1ba27b416bf854398c66574d
parent8fb157f8b7822b62b2df5668f77a67b608b39267 (diff)
downloadqtwebkit-7b1f8c369100f57861ad8054d17a04da8b604203.tar.gz
Flash of garbage pixels when playing a show on Hulu
<https://webkit.org/b/119871> Source/WebCore: Reviewed by Tim Horton. When starting a show on Hulu, there's a layer that gets marked as opaque because it has a child RenderLayer whose background fills the compositing layer. That child RenderLayer was recently position:fixed but outside the viewport, so its viewportConstrainedNotCompositedReason was set to a non-zero value. However, we failed to clear the viewportConstrainedNotCompositedReason when the layer became non-fixed. This caused painting the opaque layer to bail in RenderLayer::paintLayer(), leaving garbage. Test: compositing/contents-opaque/fixed-to-nonfixed.html * rendering/RenderLayer.cpp: (WebCore::RenderLayer::paintLayer): Add an assertion to catch this error in future. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateBacking): Make sure we clear the ViewportConstrainedNotCompositedReason if the layer is no longer fixed. Change-Id: Ie1aa935b8271cd8cc3159f5337d483a77d74b8a0 git-svn-id: http://svn.webkit.org/repository/webkit/trunk@154147 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Michael Bruning <michael.bruning@digia.com>
-rw-r--r--Source/WebCore/rendering/RenderLayer.cpp1
-rw-r--r--Source/WebCore/rendering/RenderLayerCompositor.cpp3
2 files changed, 3 insertions, 1 deletions
diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp
index c378f18e6..2d0b56e79 100644
--- a/Source/WebCore/rendering/RenderLayer.cpp
+++ b/Source/WebCore/rendering/RenderLayer.cpp
@@ -3619,6 +3619,7 @@ void RenderLayer::paintLayer(GraphicsContext* context, const LayerPaintingInfo&
} else if (viewportConstrainedNotCompositedReason() == NotCompositedForBoundsOutOfView) {
// Don't paint out-of-view viewport constrained layers (when doing prepainting) because they will never be visible
// unless their position or viewport size is changed.
+ ASSERT(renderer()->style()->position() == FixedPosition);
return;
}
#endif
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp
index 6f1fd3e0b..784ebdc80 100644
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp
@@ -767,7 +767,8 @@ bool RenderLayerCompositor::updateBacking(RenderLayer* layer, CompositingChangeR
if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
scrollingCoordinator->frameViewFixedObjectsDidChange(m_renderView->frameView());
}
- }
+ } else
+ layer->setViewportConstrainedNotCompositedReason(RenderLayer::NoNotCompositedReason);
if (layer->backing())
layer->backing()->updateDebugIndicators(m_showDebugBorders, m_showRepaintCounter);