Title: [98771] trunk/Source/WebCore
- Revision
- 98771
- Author
- [email protected]
- Date
- 2011-10-28 15:34:42 -0700 (Fri, 28 Oct 2011)
Log Message
Unreviewed, rolling out r98757.
http://trac.webkit.org/changeset/98757
https://bugs.webkit.org/show_bug.cgi?id=71150
crashes webkit_unit_tests on chromium windows (Requested by
johnny_g on #webkit).
Patch by Sheriff Bot <[email protected]> on 2011-10-28
* platform/graphics/chromium/LayerRendererChromium.cpp:
(WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
* platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
(WebCore::CCLayerTreeHost::paintLayerContents):
(WebCore::CCLayerTreeHost::updateCompositorResources):
* platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
(WebCore::calculateDrawTransformsAndVisibilityInternal):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (98770 => 98771)
--- trunk/Source/WebCore/ChangeLog 2011-10-28 22:21:49 UTC (rev 98770)
+++ trunk/Source/WebCore/ChangeLog 2011-10-28 22:34:42 UTC (rev 98771)
@@ -1,3 +1,20 @@
+2011-10-28 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r98757.
+ http://trac.webkit.org/changeset/98757
+ https://bugs.webkit.org/show_bug.cgi?id=71150
+
+ crashes webkit_unit_tests on chromium windows (Requested by
+ johnny_g on #webkit).
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
+ * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
+ (WebCore::CCLayerTreeHost::paintLayerContents):
+ (WebCore::CCLayerTreeHost::updateCompositorResources):
+ * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
+ (WebCore::calculateDrawTransformsAndVisibilityInternal):
+
2011-10-28 Adam Barth <[email protected]>
Rubber-stamped by Eric Seidel.
Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (98770 => 98771)
--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp 2011-10-28 22:21:49 UTC (rev 98770)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp 2011-10-28 22:34:42 UTC (rev 98771)
@@ -312,10 +312,19 @@
CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex].get();
CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface();
ASSERT(renderSurface);
- ASSERT(renderSurface->layerList().size());
- ASSERT(renderSurface->drawOpacity());
+ renderSurface->setSkipsDraw(true);
+
+ if (!renderSurface->layerList().size())
+ continue;
+
+ // Skip completely transparent render surfaces.
+ if (!renderSurface->drawOpacity())
+ continue;
+
if (useRenderSurface(renderSurface)) {
+ renderSurface->setSkipsDraw(false);
+
if (renderSurfaceLayer != rootDrawLayer) {
GLC(m_context.get(), m_context->disable(GraphicsContext3D::SCISSOR_TEST));
GLC(m_context.get(), m_context->clearColor(0, 0, 0, 0));
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (98770 => 98771)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp 2011-10-28 22:21:49 UTC (rev 98770)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp 2011-10-28 22:34:42 UTC (rev 98771)
@@ -330,9 +330,15 @@
LayerChromium* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex].get();
RenderSurfaceChromium* renderSurface = renderSurfaceLayer->renderSurface();
ASSERT(renderSurface);
- ASSERT(renderSurface->layerList().size());
- ASSERT(renderSurface->drawOpacity());
+ // Render surfaces whose drawable area has zero width or height
+ // will have no layers associated with them and should be skipped.
+ if (!renderSurface->layerList().size())
+ continue;
+
+ if (!renderSurface->drawOpacity())
+ continue;
+
renderSurfaceLayer->setLayerTreeHost(this);
paintMaskAndReplicaForRenderSurface(renderSurfaceLayer);
@@ -364,9 +370,10 @@
LayerChromium* renderSurfaceLayer = m_updateList[surfaceIndex].get();
RenderSurfaceChromium* renderSurface = renderSurfaceLayer->renderSurface();
ASSERT(renderSurface);
- ASSERT(renderSurface->layerList().size());
- ASSERT(renderSurface->drawOpacity());
+ if (!renderSurface->layerList().size() || !renderSurface->drawOpacity())
+ continue;
+
if (renderSurfaceLayer->maskLayer())
updateCompositorResources(renderSurfaceLayer->maskLayer(), context, updater);
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp (98770 => 98771)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp 2011-10-28 22:21:49 UTC (rev 98770)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp 2011-10-28 22:34:42 UTC (rev 98771)
@@ -232,20 +232,9 @@
bool useSurfaceForReflection = layer->replicaLayer();
bool useSurfaceForFlatDescendants = layer->parent() && layer->parent()->preserves3D() && !layer->preserves3D() && layer->descendantDrawsContent();
if (useSurfaceForMasking || useSurfaceForReflection || useSurfaceForFlatDescendants || ((useSurfaceForClipping || useSurfaceForOpacity) && layer->descendantDrawsContent())) {
- // Layer's opacity will be applied when drawing the render surface.
- float drawOpacity = layer->opacity();
- if (layer->parent() && layer->parent()->preserves3D())
- drawOpacity *= layer->parent()->drawOpacity();
-
- // If this render surface isn't drawn, we can also skip its children.
- if (!drawOpacity)
- return;
-
if (!layer->renderSurface())
layer->createRenderSurface();
-
RenderSurfaceType* renderSurface = layer->renderSurface();
- renderSurface->clearLayerList();
// The origin of the new surface is the upper left corner of the layer.
TransformationMatrix drawTransform;
@@ -254,6 +243,10 @@
transformedLayerRect = IntRect(0, 0, bounds.width(), bounds.height());
+ // Layer's opacity will be applied when drawing the render surface.
+ float drawOpacity = layer->opacity();
+ if (layer->parent() && layer->parent()->preserves3D())
+ drawOpacity *= layer->parent()->drawOpacity();
renderSurface->setDrawOpacity(drawOpacity);
layer->setDrawOpacity(1);
@@ -269,6 +262,8 @@
// surface and is therefore expressed in the parent's coordinate system.
renderSurface->setScissorRect(layer->parent() ? layer->parent()->scissorRect() : layer->scissorRect());
+ renderSurface->clearLayerList();
+
if (layer->maskLayer()) {
renderSurface->setMaskLayer(layer->maskLayer());
layer->maskLayer()->setTargetRenderSurface(renderSurface);
@@ -376,20 +371,6 @@
}
}
- if (layer->renderSurface() && !layer->renderSurface()->layerList().size()) {
- // If a render surface has no layer list, then it and none of its
- // children needed to get drawn. Therefore, it should be the last layer
- // in the render surface list and we can trivially remove it.
- ASSERT(renderSurfaceLayerList.last() == layer);
- renderSurfaceLayerList.removeLast();
- layer->clearRenderSurface();
- return;
- }
-
- // If neither this layer nor any of its children were added, early out.
- if (sortingStartIndex == descendants.size())
- return;
-
if (layer->masksToBounds() || useSurfaceForMasking) {
IntRect drawableContentRect = layer->drawableContentRect();
drawableContentRect.intersect(transformedLayerRect);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes