⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 98771 in webkit


Ignore:
Timestamp:
Oct 28, 2011, 3:34:42 PM (15 years ago)
Author:
johnnyg@google.com
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 <webkit.review.bot@gmail.com> 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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r98770 r98771  
     12011-10-28  Sheriff Bot  <webkit.review.bot@gmail.com>
     2
     3        Unreviewed, rolling out r98757.
     4        http://trac.webkit.org/changeset/98757
     5        https://bugs.webkit.org/show_bug.cgi?id=71150
     6
     7        crashes webkit_unit_tests on chromium windows (Requested by
     8        johnny_g on #webkit).
     9
     10        * platform/graphics/chromium/LayerRendererChromium.cpp:
     11        (WebCore::LayerRendererChromium::drawLayersOntoRenderSurfaces):
     12        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
     13        (WebCore::CCLayerTreeHost::paintLayerContents):
     14        (WebCore::CCLayerTreeHost::updateCompositorResources):
     15        * platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:
     16        (WebCore::calculateDrawTransformsAndVisibilityInternal):
     17
    1182011-10-28  Adam Barth  <abarth@webkit.org>
    219
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r98757 r98771  
    313313        CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface();
    314314        ASSERT(renderSurface);
    315         ASSERT(renderSurface->layerList().size());
    316         ASSERT(renderSurface->drawOpacity());
     315
     316        renderSurface->setSkipsDraw(true);
     317
     318        if (!renderSurface->layerList().size())
     319            continue;
     320
     321        // Skip completely transparent render surfaces.
     322        if (!renderSurface->drawOpacity())
     323            continue;
    317324
    318325        if (useRenderSurface(renderSurface)) {
     326            renderSurface->setSkipsDraw(false);
     327
    319328            if (renderSurfaceLayer != rootDrawLayer) {
    320329                GLC(m_context.get(), m_context->disable(GraphicsContext3D::SCISSOR_TEST));
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp

    r98757 r98771  
    331331        RenderSurfaceChromium* renderSurface = renderSurfaceLayer->renderSurface();
    332332        ASSERT(renderSurface);
    333         ASSERT(renderSurface->layerList().size());
    334         ASSERT(renderSurface->drawOpacity());
     333
     334        // Render surfaces whose drawable area has zero width or height
     335        // will have no layers associated with them and should be skipped.
     336        if (!renderSurface->layerList().size())
     337            continue;
     338
     339        if (!renderSurface->drawOpacity())
     340            continue;
    335341
    336342        renderSurfaceLayer->setLayerTreeHost(this);
     
    365371        RenderSurfaceChromium* renderSurface = renderSurfaceLayer->renderSurface();
    366372        ASSERT(renderSurface);
    367         ASSERT(renderSurface->layerList().size());
    368         ASSERT(renderSurface->drawOpacity());
     373
     374        if (!renderSurface->layerList().size() || !renderSurface->drawOpacity())
     375            continue;
    369376
    370377        if (renderSurfaceLayer->maskLayer())
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp

    r98757 r98771  
    233233    bool useSurfaceForFlatDescendants = layer->parent() && layer->parent()->preserves3D() && !layer->preserves3D() && layer->descendantDrawsContent();
    234234    if (useSurfaceForMasking || useSurfaceForReflection || useSurfaceForFlatDescendants || ((useSurfaceForClipping || useSurfaceForOpacity) && layer->descendantDrawsContent())) {
     235        if (!layer->renderSurface())
     236            layer->createRenderSurface();
     237        RenderSurfaceType* renderSurface = layer->renderSurface();
     238
     239        // The origin of the new surface is the upper left corner of the layer.
     240        TransformationMatrix drawTransform;
     241        drawTransform.translate3d(0.5 * bounds.width(), 0.5 * bounds.height(), 0);
     242        layer->setDrawTransform(drawTransform);
     243
     244        transformedLayerRect = IntRect(0, 0, bounds.width(), bounds.height());
     245
    235246        // Layer's opacity will be applied when drawing the render surface.
    236247        float drawOpacity = layer->opacity();
    237248        if (layer->parent() && layer->parent()->preserves3D())
    238249            drawOpacity *= layer->parent()->drawOpacity();
    239 
    240         // If this render surface isn't drawn, we can also skip its children.
    241         if (!drawOpacity)
    242             return;
    243 
    244         if (!layer->renderSurface())
    245             layer->createRenderSurface();
    246 
    247         RenderSurfaceType* renderSurface = layer->renderSurface();
    248         renderSurface->clearLayerList();
    249 
    250         // The origin of the new surface is the upper left corner of the layer.
    251         TransformationMatrix drawTransform;
    252         drawTransform.translate3d(0.5 * bounds.width(), 0.5 * bounds.height(), 0);
    253         layer->setDrawTransform(drawTransform);
    254 
    255         transformedLayerRect = IntRect(0, 0, bounds.width(), bounds.height());
    256 
    257250        renderSurface->setDrawOpacity(drawOpacity);
    258251        layer->setDrawOpacity(1);
     
    269262        // surface and is therefore expressed in the parent's coordinate system.
    270263        renderSurface->setScissorRect(layer->parent() ? layer->parent()->scissorRect() : layer->scissorRect());
     264
     265        renderSurface->clearLayerList();
    271266
    272267        if (layer->maskLayer()) {
     
    377372    }
    378373
    379     if (layer->renderSurface() && !layer->renderSurface()->layerList().size()) {
    380         // If a render surface has no layer list, then it and none of its
    381         // children needed to get drawn. Therefore, it should be the last layer
    382         // in the render surface list and we can trivially remove it.
    383         ASSERT(renderSurfaceLayerList.last() == layer);
    384         renderSurfaceLayerList.removeLast();
    385         layer->clearRenderSurface();
    386         return;
    387     }
    388 
    389     // If neither this layer nor any of its children were added, early out.
    390     if (sortingStartIndex == descendants.size())
    391         return;
    392 
    393374    if (layer->masksToBounds() || useSurfaceForMasking) {
    394375        IntRect drawableContentRect = layer->drawableContentRect();
Note: See TracChangeset for help on using the changeset viewer.