Changeset 147983 in webkit


Ignore:
Timestamp:
Apr 8, 2013 11:16:14 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Rollout r147756: performance regression
https://bugs.webkit.org/show_bug.cgi?id=114176

Patch by Mihai Maerean <Mihai Maerean> on 2013-04-08
Reviewed by Alexis Menard.

Source/WebCore:

Rolling out the patch for https://bugs.webkit.org/show_bug.cgi?id=74144 "[CSS Regions] Elements in a region
should be assignable to a named flow" because of the performance regression in Parser/html5-full-render.html .

No new tests (because this is a rollout patch).

  • dom/Element.cpp:
  • dom/Element.h:
  • dom/NodeRenderingContext.cpp:

(WebCore::NodeRenderingContext::parentRenderer):
(WebCore::NodeRenderingContext::shouldCreateRenderer):
(WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):

  • dom/NodeRenderingContext.h:
  • dom/PseudoElement.h:
  • dom/Text.cpp:

(WebCore::Text::textRendererIsNeeded):
(WebCore::Text::updateTextRenderer):

  • dom/Text.h:
  • rendering/FlowThreadController.cpp:
  • rendering/FlowThreadController.h:
  • rendering/RenderObject.h:
  • rendering/RenderRegion.h:
  • svg/SVGElement.cpp:
  • svg/SVGElement.h:

LayoutTests:

  • fast/regions/flow-body-in-html-expected.txt: Removed.
  • fast/regions/flow-body-in-html.html: Removed.
  • fast/regions/region-content-flown-into-region-expected.html: Removed.
  • fast/regions/region-content-flown-into-region.html: Removed.
  • fast/regions/universal-selector-children-to-the-same-region-expected.txt: Removed.
  • fast/regions/universal-selector-children-to-the-same-region.html: Removed.
Location:
trunk
Files:
6 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r147979 r147983  
     12013-04-08  Mihai Maerean  <mmaerean@adobe.com>
     2
     3        Rollout r147756: performance regression
     4        https://bugs.webkit.org/show_bug.cgi?id=114176
     5
     6        Reviewed by Alexis Menard.
     7
     8        * fast/regions/flow-body-in-html-expected.txt: Removed.
     9        * fast/regions/flow-body-in-html.html: Removed.
     10        * fast/regions/region-content-flown-into-region-expected.html: Removed.
     11        * fast/regions/region-content-flown-into-region.html: Removed.
     12        * fast/regions/universal-selector-children-to-the-same-region-expected.txt: Removed.
     13        * fast/regions/universal-selector-children-to-the-same-region.html: Removed.
     14
    1152013-04-08  Benjamin Poulain  <benjamin@webkit.org>
    216
  • trunk/Source/WebCore/ChangeLog

    r147979 r147983  
     12013-04-08  Mihai Maerean  <mmaerean@adobe.com>
     2
     3        Rollout r147756: performance regression
     4        https://bugs.webkit.org/show_bug.cgi?id=114176
     5
     6        Reviewed by Alexis Menard.
     7
     8        Rolling out the patch for https://bugs.webkit.org/show_bug.cgi?id=74144 "[CSS Regions] Elements in a region
     9        should be assignable to a named flow" because of the performance regression in Parser/html5-full-render.html .
     10
     11        No new tests (because this is a rollout patch).
     12
     13        * dom/Element.cpp:
     14        * dom/Element.h:
     15        * dom/NodeRenderingContext.cpp:
     16        (WebCore::NodeRenderingContext::parentRenderer):
     17        (WebCore::NodeRenderingContext::shouldCreateRenderer):
     18        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
     19        * dom/NodeRenderingContext.h:
     20        * dom/PseudoElement.h:
     21        * dom/Text.cpp:
     22        (WebCore::Text::textRendererIsNeeded):
     23        (WebCore::Text::updateTextRenderer):
     24        * dom/Text.h:
     25        * rendering/FlowThreadController.cpp:
     26        * rendering/FlowThreadController.h:
     27        * rendering/RenderObject.h:
     28        * rendering/RenderRegion.h:
     29        * svg/SVGElement.cpp:
     30        * svg/SVGElement.h:
     31       
    1322013-04-08  Benjamin Poulain  <benjamin@webkit.org>
    233
  • trunk/Source/WebCore/dom/Element.cpp

    r147756 r147983  
    25592559}
    25602560
    2561 bool Element::moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle)
    2562 {
    2563     Document* doc = document();
    2564    
    2565     if (!doc->cssRegionsEnabled())
    2566         return false;
    2567 
    2568 #if ENABLE(FULLSCREEN_API)
    2569     if (doc->webkitIsFullScreen() && doc->webkitCurrentFullScreenElement() == this)
    2570         return false;
    2571 #endif
    2572 
    2573     if (isInShadowTree())
    2574         return false;
    2575 
    2576     if (!cachedStyle)
    2577         cachedStyle = styleForRenderer();
    2578     if (!cachedStyle)
    2579         return false;
    2580 
    2581     if (cachedStyle->flowThread().isEmpty())
    2582         return false;
    2583 
    2584     return !document()->renderView()->flowThreadController()->isContentNodeRegisteredWithAnyNamedFlow(this);
    2585 }
    2586 
    25872561#if ENABLE(CSS_REGIONS)
    25882562
  • trunk/Source/WebCore/dom/Element.h

    r147756 r147983  
    610610
    611611    RenderRegion* renderRegion() const;
    612     virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle);
    613612#if ENABLE(CSS_REGIONS)
    614613    const AtomicString& webkitRegionOverset() const;
  • trunk/Source/WebCore/dom/NodeRenderingContext.cpp

    r147756 r147983  
    149149}
    150150
    151 RenderObject* NodeRenderingContext::parentRenderer()
     151RenderObject* NodeRenderingContext::parentRenderer() const
    152152{
    153153    if (RenderObject* renderer = m_node->renderer())
     
    171171        return m_parentFlowRenderer;
    172172
    173     if (m_node->isElementNode() && toElement(m_node)->moveToFlowThreadIsNeeded(m_style)) {
    174         moveToFlowThread();
    175         return m_parentFlowRenderer;
    176     }
    177 
    178173    return m_renderingParent ? m_renderingParent->renderer() : 0;
    179174}
    180175
    181 bool NodeRenderingContext::shouldCreateRenderer()
     176bool NodeRenderingContext::shouldCreateRenderer() const
    182177{
    183178    if (!m_node->document()->shouldCreateRenderers())
     
    188183    if (!parentRenderer)
    189184        return false;
    190     if (!parentRenderer->canHaveChildren()) {
    191         if (parentRenderer->canDOMChildrenHaveRenderParent()) {
    192             // In a region, only the children that need to be in a flow thread should have a renderer.
    193             bool shouldBeInNamedFlow = m_node->isElementNode() && toElement(m_node)->moveToFlowThreadIsNeeded(m_style);
    194             if (!shouldBeInNamedFlow)
    195                 return false;
    196         } else
    197             return false;
    198     }
    199 
     185    if (!parentRenderer->canHaveChildren())
     186        return false;
    200187    if (!m_renderingParent->childShouldCreateRenderer(*this))
    201188        return false;
     
    206193{
    207194    ASSERT(m_node->isElementNode());
    208 
    209     if (!toElement(m_node)->moveToFlowThreadIsNeeded(m_style))
    210         return;
    211 
    212     moveToFlowThread();
    213 }
    214 
    215 void NodeRenderingContext::moveToFlowThread()
    216 {
    217     ASSERT(m_node->isElementNode());
    218     ASSERT(toElement(m_node)->moveToFlowThreadIsNeeded(m_style));
    219 
    220     if (!m_style)
    221         m_style = toElement(m_node)->styleForRenderer();
    222195    ASSERT(m_style);
     196    if (!m_node->document()->cssRegionsEnabled())
     197        return;
     198
     199    if (m_style->flowThread().isEmpty())
     200        return;
     201
     202    // As per http://dev.w3.org/csswg/css3-regions/#flow-into, pseudo-elements such as ::first-line, ::first-letter, ::before or ::after
     203    // cannot be directly collected into a named flow.
     204    if (m_node->isPseudoElement())
     205        return;
     206
     207    // FIXME: Do not collect elements if they are in shadow tree.
     208    if (m_node->isInShadowTree())
     209        return;
     210
     211#if ENABLE(FULLSCREEN_API)
     212    Document* document = m_node->document();
     213    if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == m_node)
     214        return;
     215#endif
     216
     217#if ENABLE(SVG)
     218    // Allow only svg root elements to be directly collected by a render flow thread.
     219    if (m_node->isSVGElement()
     220        && (!(m_node->hasTagName(SVGNames::svgTag) && m_node->parentNode() && !m_node->parentNode()->isSVGElement())))
     221        return;
     222#endif
     223
    223224    m_flowThread = m_style->flowThread();
    224225    ASSERT(m_node->document()->renderView());
  • trunk/Source/WebCore/dom/NodeRenderingContext.h

    r147756 r147983  
    5656    ContainerNode* parentNodeForRenderingAndStyle() const;
    5757    bool resetStyleInheritance() const;
    58     RenderObject* parentRenderer(); // the renderer that will be the parent for this node's renderer. In the case of RenderFlowThreads, it may need to create it.
     58    RenderObject* parentRenderer() const;
    5959    RenderObject* nextRenderer() const;
    6060    RenderObject* previousRenderer() const;
     
    6767
    6868private:
    69     bool shouldCreateRenderer();
    70     void moveToFlowThread();
     69    bool shouldCreateRenderer() const;
    7170    void moveToFlowThreadIfNeeded();
    7271
  • trunk/Source/WebCore/dom/PseudoElement.h

    r147756 r147983  
    4747    virtual bool rendererIsNeeded(const NodeRenderingContext&) OVERRIDE;
    4848
    49     // As per http://dev.w3.org/csswg/css3-regions/#flow-into, pseudo-elements such as ::first-line, ::first-letter, ::before or ::after
    50     // cannot be directly collected into a named flow.
    51     virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle) OVERRIDE
    52     {
    53         UNUSED_PARAM(cachedStyle);
    54         return false;
    55     }
    56 
    5749    virtual bool canStartSelection() const OVERRIDE { return false; }
    5850    virtual bool canContainRangeEndPoint() const OVERRIDE { return false; }
  • trunk/Source/WebCore/dom/Text.cpp

    r147756 r147983  
    198198}
    199199
    200 bool Text::textRendererIsNeeded(NodeRenderingContext& context)
     200bool Text::textRendererIsNeeded(const NodeRenderingContext& context)
    201201{
    202202    if (isEditingText())
     
    303303        return;
    304304    RenderText* textRenderer = toRenderText(renderer());
    305     if (!textRenderer) {
    306         reattach();
    307         return;
    308     }
    309     NodeRenderingContext renderingContext(this, textRenderer->style());
    310     if (!textRendererIsNeeded(renderingContext)) {
     305    if (!textRenderer || !textRendererIsNeeded(NodeRenderingContext(this, textRenderer->style()))) {
    311306        reattach();
    312307        return;
  • trunk/Source/WebCore/dom/Text.h

    r147756 r147983  
    4747    void recalcTextStyle(StyleChange);
    4848    void createTextRendererIfNeeded();
    49     bool textRendererIsNeeded(NodeRenderingContext&);
     49    bool textRendererIsNeeded(const NodeRenderingContext&);
    5050    RenderText* createTextRenderer(RenderArena*, RenderStyle*);
    5151    void updateTextRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);
  • trunk/Source/WebCore/rendering/FlowThreadController.cpp

    r147756 r147983  
    228228}
    229229
    230 bool FlowThreadController::isContentNodeRegisteredWithAnyNamedFlow(Node* contentNode) const
    231 {
    232     return m_mapNamedFlowContentNodes.contains(contentNode);
    233 }
    234 
    235230#ifndef NDEBUG
    236231bool FlowThreadController::isAutoLogicalHeightRegionsCountConsistent() const
  • trunk/Source/WebCore/rendering/FlowThreadController.h

    r147756 r147983  
    6767    void registerNamedFlowContentNode(Node*, RenderNamedFlowThread*);
    6868    void unregisterNamedFlowContentNode(Node*);
    69     bool isContentNodeRegisteredWithAnyNamedFlow(Node*) const;
    7069
    7170    bool hasFlowThreadsWithAutoLogicalHeightRegions() const { return m_flowThreadsWithAutoLogicalHeightRegions; }
  • trunk/Source/WebCore/rendering/RenderObject.h

    r147940 r147983  
    252252    //////////////////////////////////////////
    253253    virtual bool canHaveChildren() const { return virtualChildren(); }
    254     virtual bool canDOMChildrenHaveRenderParent() const { return false; } // Even if this render object can't have render children, the children in the DOM tree may have a render parent (that is different from this object).
    255254    virtual bool canHaveGeneratedChildren() const;
    256255    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; }
  • trunk/Source/WebCore/rendering/RenderRegion.h

    r147756 r147983  
    146146
    147147    virtual bool canHaveChildren() const OVERRIDE { return false; }
    148     virtual bool canDOMChildrenHaveRenderParent() const OVERRIDE { return true; }
    149148
    150149    virtual void insertedIntoTree() OVERRIDE;
  • trunk/Source/WebCore/svg/SVGElement.cpp

    r147756 r147983  
    451451
    452452    return false;
    453 }
    454 
    455 bool SVGElement::moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle)
    456 {
    457     // Allow only svg root elements to be directly collected by a render flow thread.
    458     return parentNode() && !parentNode()->isSVGElement() && hasTagName(SVGNames::svgTag) && Element::moveToFlowThreadIsNeeded(cachedStyle);
    459453}
    460454
  • trunk/Source/WebCore/svg/SVGElement.h

    r147756 r147983  
    121121    virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture) OVERRIDE;
    122122
    123     virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle) OVERRIDE;
    124 
    125123protected:
    126124    SVGElement(const QualifiedName&, Document*, ConstructionType = CreateSVGElement);
Note: See TracChangeset for help on using the changeset viewer.