[Webkit-unassigned] [Bug 59026] New: RenderLayers mutate the GraphicsLayer tree during GraphicsLayerClient::paintContents callback

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Apr 20 14:24:15 PDT 2011


https://bugs.webkit.org/show_bug.cgi?id=59026

           Summary: RenderLayers mutate the GraphicsLayer tree during
                    GraphicsLayerClient::paintContents callback
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: PC
        OS/Version: Mac OS X 10.5
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: New Bugs
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: jamesr at chromium.org
                CC: simon.fraser at apple.com, vangelis at chromium.org,
                    enne at google.com, nduca at chromium.org


The composited layer paint callback can call RenderLayer::paintLayer() which calls RenderLayer::updateCompositingLayers() (http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderLayer.cpp#L2577) which can cause arbitrary mutations to the GraphicsLayer tree or turn compositing off.  This likely produces incorrect compositing results everywhere and causes crashes in the Chromium compositor implementation as it is currently not safe to arbitrary mutations during painting.  Here's one example callstack showing the compositor becoming disabled during paint (chromium-specific bits of the stack omitted):

 #9 0x00000000006a8fb7 in WebCore::RenderLayerCompositor::enableCompositingMode
    (this=0x7fffebcb8640, enable=false)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp:138
#10 0x00000000006ab160 in WebCore::RenderLayerCompositor::computeCompositingRequirements (this=0x7fffebcb8640, layer=0x7fffebc89c78, 
    overlapMap=0x7fffffffa960, compositingState=..., 
    layersChanged=@0x7fffffffa95c)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp:726
#11 0x00000000006a9580 in WebCore::RenderLayerCompositor::updateCompositingLayers (this=0x7fffebcb8640, 
    updateType=WebCore::CompositingUpdateOnPaitingOrHitTest, 
    updateRoot=0x7fffebc89c78)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp:287
#12 0x0000000000694f7c in WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded (this=0x7fffebc89c78)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp:3880
#13 0x000000000068ecf0 in WebCore::RenderLayer::paintLayer (
    this=0x7fffebc89c78, rootLayer=0x7fffebc89c78, p=0x7fffeb40a6c0, 
    paintDirtyRect=..., paintBehavior=0, paintingRoot=0x0, 
    overlapTestRequests=0x7fffffffad80, paintFlags=0)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp:2578
#14 0x000000000068e281 in WebCore::RenderLayer::paint (this=0x7fffebc89c78, 
    p=0x7fffeb40a6c0, damageRect=..., paintBehavior=0, paintingRoot=0x0)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp:2425
#15 0x0000000000cc7b59 in WebCore::FrameView::paintContents (
    this=0x7fffeb710600, p=0x7fffeb40a6c0, rect=...)
    at third_party/WebKit/Source/WebCore/page/FrameView.cpp:2355
#16 0x000000000289322f in WebCore::ScrollView::paint (this=0x7fffeb710600, 
    context=0x7fffeb40a6c0, rect=...)
    at third_party/WebKit/Source/WebCore/platform/ScrollView.cpp:1005
#17 0x0000000000710ef7 in WebCore::RenderWidget::paint (this=0x7ffff7ecee18, 
    paintInfo=..., tx=0, ty=0)
    at third_party/WebKit/Source/WebCore/rendering/RenderWidget.cpp:301
#18 0x00000000006a4831 in WebCore::RenderLayerBacking::paintIntoLayer (
    this=0x7fffeb6f8070, rootLayer=0x7fffebc9cdd8, context=0x7fffeb40a6c0, 
    paintDirtyRect=..., paintBehavior=0, 
    paintingPhase=WebCore::GraphicsLayerPaintAll, paintingRoot=0x7ffff7ecee18)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayerBacking.cpp:1153
#19 0x00000000006a4ea9 in WebCore::RenderLayerBacking::paintContents (
    this=0x7fffeb6f8070, graphicsLayer=0x7fffeb6e1800, context=..., 
    paintingPhase=WebCore::GraphicsLayerPaintAll, clip=...)
    at third_party/WebKit/Source/WebCore/rendering/RenderLayerBacking.cpp:1224
#20 0x0000000002920104 in WebCore::GraphicsLayer::paintGraphicsLayerContents (
    this=0x7fffeb6e1800, context=..., clip=...)
    at third_party/WebKit/Source/WebCore/platform/graphics/GraphicsLayer.cpp:248

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list