[Webkit-unassigned] [Bug 102626] New: Calling calculateCompositedBounds() inside recalcStyle() is bogus

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Sun Nov 18 17:45:51 PST 2012


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

           Summary: Calling calculateCompositedBounds() inside
                    recalcStyle() is bogus
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: Unspecified
        OS/Version: Unspecified
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: Layout and Rendering
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: simon.fraser at apple.com
                CC: bdakin at apple.com


RenderLayerCompositor::requiresCompositingForPosition() calls calculateCompositedBounds() to determine if the layer is inside the viewport.
However, we haven't done layout yet, so it's crazy to ask for layer dimensions at this point.

We need to do this by setting the m_reevaluateCompositingAfterLayout flag and only doing it once layout is complete.

Here's the bad stack:

    frame #6: 0x00000001045f7b0c WebCore`WebCore::RenderLayer::calculateLayerBounds(WebCore::RenderLayer const*, WebCore::LayoutPoint const*, unsigned int) const + 2172 at RenderLayer.cpp:4595
    frame #7: 0x000000010462b8eb WebCore`WebCore::RenderLayerCompositor::calculateCompositedBounds(WebCore::RenderLayer const*, WebCore::RenderLayer const*) const + 75 at RenderLayerCompositor.cpp:681
    frame #8: 0x000000010462f6ca WebCore`WebCore::RenderLayerCompositor::requiresCompositingForPosition(WebCore::RenderObject*, WebCore::RenderLayer const*) const + 426 at RenderLayerCompositor.cpp:1965
    frame #9: 0x000000010462aac5 WebCore`WebCore::RenderLayerCompositor::requiresCompositingLayer(WebCore::RenderLayer const*) const + 373 at RenderLayerCompositor.cpp:1560
    frame #10: 0x000000010462b3ed WebCore`WebCore::RenderLayerCompositor::needsToBeComposited(WebCore::RenderLayer const*) const + 77 at RenderLayerCompositor.cpp:1536
    frame #11: 0x000000010462af99 WebCore`WebCore::RenderLayerCompositor::updateBacking(WebCore::RenderLayer*, WebCore::RenderLayerCompositor::CompositingChangeRepaint) + 57 at RenderLayerCompositor.cpp:538
    frame #12: 0x000000010462b733 WebCore`WebCore::RenderLayerCompositor::updateLayerCompositingState(WebCore::RenderLayer*, WebCore::RenderLayerCompositor::CompositingChangeRepaint) + 35 at RenderLayerCompositor.cpp:624
    frame #13: 0x000000010460c822 WebCore`WebCore::RenderLayer::styleChanged(WebCore::StyleDifference, WebCore::RenderStyle const*) + 802 at RenderLayer.cpp:5114
    frame #14: 0x000000010463d54e WebCore`WebCore::RenderLayerModelObject::styleDidChange(WebCore::StyleDifference, WebCore::RenderStyle const*) + 558 at RenderLayerModelObject.cpp:160
    frame #15: 0x000000010455e586 WebCore`WebCore::RenderBox::styleDidChange(WebCore::StyleDifference, WebCore::RenderStyle const*) + 70 at RenderBox.cpp:209
    frame #16: 0x00000001044e4563 WebCore`WebCore::RenderBlock::styleDidChange(WebCore::StyleDifference, WebCore::RenderStyle const*) + 51 at RenderBlock.cpp:327
    frame #17: 0x000000010467a8c2 WebCore`WebCore::RenderObject::setStyle(WTF::PassRefPtr<WebCore::RenderStyle>) + 1522 at RenderObject.cpp:1792
    frame #18: 0x0000000104679faa WebCore`WebCore::RenderObject::setAnimatableStyle(WTF::PassRefPtr<WebCore::RenderStyle>) + 138 at RenderObject.cpp:1693
    frame #19: 0x000000010388c42e WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 1374 at Element.cpp:1262
    frame #20: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #21: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #22: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #23: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #24: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #25: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #26: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #27: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #28: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #29: 0x000000010388c78f WebCore`WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 2239 at Element.cpp:1313
    frame #30: 0x0000000103680c24 WebCore`WebCore::Document::recalcStyle(WebCore::Node::StyleChange) + 1156 at Document.cpp:1859
    frame #31: 0x000000010367cd0c WebCore`WebCore::Document::updateStyleIfNeeded() + 396 at Document.cpp:1903
    frame #32: 0x0000000103681379 WebCore`WebCore::Document::updateLayout() + 153 at Document.cpp:1926
    frame #33: 0x00000001036814c5 WebCore`WebCore::Document::updateLayoutIgnorePendingStylesheets() + 197 at Document.cpp:1964
    frame #34: 0x0000000103a950c2 WebCore`WebCore::HTMLBodyElement::scrollLeft() + 34 at HTMLBodyElement.cpp:262
    frame #35: 0x0000000103eb883e WebCore`WebCore::jsElementScrollLeft(JSC::ExecState*, JSC::JSValue, JSC::PropertyName) + 78 at JSElement.cpp:387
    frame #36: 0x00000001023193e9 JavaScriptCore`JSC::PropertySlot::getValue(JSC::ExecState*, JSC::PropertyName) const + 249 at PropertySlot.h:76
    frame #37: 0x000000010232d0d2 JavaScriptCore`JSC::JSValue::get(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&) const + 242 at JSObject.h:1465
    frame #38: 0x00000001026f3451 JavaScriptCore`llint_slow_path_get_by_id + 241 at LLIntSlowPaths.cpp:917
    frame #39: 0x00000001026fc874 JavaScriptCore`llint_op_get_by_id + 122
(lldb)

-- 
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