Changeset 147983 in webkit
- Timestamp:
- Apr 8, 2013 11:16:14 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 6 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r147979 r147983 1 2013-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 1 15 2013-04-08 Benjamin Poulain <benjamin@webkit.org> 2 16 -
trunk/Source/WebCore/ChangeLog
r147979 r147983 1 2013-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 1 32 2013-04-08 Benjamin Poulain <benjamin@webkit.org> 2 33 -
trunk/Source/WebCore/dom/Element.cpp
r147756 r147983 2559 2559 } 2560 2560 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 #endif2572 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 2587 2561 #if ENABLE(CSS_REGIONS) 2588 2562 -
trunk/Source/WebCore/dom/Element.h
r147756 r147983 610 610 611 611 RenderRegion* renderRegion() const; 612 virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle);613 612 #if ENABLE(CSS_REGIONS) 614 613 const AtomicString& webkitRegionOverset() const; -
trunk/Source/WebCore/dom/NodeRenderingContext.cpp
r147756 r147983 149 149 } 150 150 151 RenderObject* NodeRenderingContext::parentRenderer() 151 RenderObject* NodeRenderingContext::parentRenderer() const 152 152 { 153 153 if (RenderObject* renderer = m_node->renderer()) … … 171 171 return m_parentFlowRenderer; 172 172 173 if (m_node->isElementNode() && toElement(m_node)->moveToFlowThreadIsNeeded(m_style)) {174 moveToFlowThread();175 return m_parentFlowRenderer;176 }177 178 173 return m_renderingParent ? m_renderingParent->renderer() : 0; 179 174 } 180 175 181 bool NodeRenderingContext::shouldCreateRenderer() 176 bool NodeRenderingContext::shouldCreateRenderer() const 182 177 { 183 178 if (!m_node->document()->shouldCreateRenderers()) … … 188 183 if (!parentRenderer) 189 184 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; 200 187 if (!m_renderingParent->childShouldCreateRenderer(*this)) 201 188 return false; … … 206 193 { 207 194 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();222 195 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 223 224 m_flowThread = m_style->flowThread(); 224 225 ASSERT(m_node->document()->renderView()); -
trunk/Source/WebCore/dom/NodeRenderingContext.h
r147756 r147983 56 56 ContainerNode* parentNodeForRenderingAndStyle() const; 57 57 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; 59 59 RenderObject* nextRenderer() const; 60 60 RenderObject* previousRenderer() const; … … 67 67 68 68 private: 69 bool shouldCreateRenderer(); 70 void moveToFlowThread(); 69 bool shouldCreateRenderer() const; 71 70 void moveToFlowThreadIfNeeded(); 72 71 -
trunk/Source/WebCore/dom/PseudoElement.h
r147756 r147983 47 47 virtual bool rendererIsNeeded(const NodeRenderingContext&) OVERRIDE; 48 48 49 // As per http://dev.w3.org/csswg/css3-regions/#flow-into, pseudo-elements such as ::first-line, ::first-letter, ::before or ::after50 // cannot be directly collected into a named flow.51 virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle) OVERRIDE52 {53 UNUSED_PARAM(cachedStyle);54 return false;55 }56 57 49 virtual bool canStartSelection() const OVERRIDE { return false; } 58 50 virtual bool canContainRangeEndPoint() const OVERRIDE { return false; } -
trunk/Source/WebCore/dom/Text.cpp
r147756 r147983 198 198 } 199 199 200 bool Text::textRendererIsNeeded( NodeRenderingContext& context)200 bool Text::textRendererIsNeeded(const NodeRenderingContext& context) 201 201 { 202 202 if (isEditingText()) … … 303 303 return; 304 304 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()))) { 311 306 reattach(); 312 307 return; -
trunk/Source/WebCore/dom/Text.h
r147756 r147983 47 47 void recalcTextStyle(StyleChange); 48 48 void createTextRendererIfNeeded(); 49 bool textRendererIsNeeded( NodeRenderingContext&);49 bool textRendererIsNeeded(const NodeRenderingContext&); 50 50 RenderText* createTextRenderer(RenderArena*, RenderStyle*); 51 51 void updateTextRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData); -
trunk/Source/WebCore/rendering/FlowThreadController.cpp
r147756 r147983 228 228 } 229 229 230 bool FlowThreadController::isContentNodeRegisteredWithAnyNamedFlow(Node* contentNode) const231 {232 return m_mapNamedFlowContentNodes.contains(contentNode);233 }234 235 230 #ifndef NDEBUG 236 231 bool FlowThreadController::isAutoLogicalHeightRegionsCountConsistent() const -
trunk/Source/WebCore/rendering/FlowThreadController.h
r147756 r147983 67 67 void registerNamedFlowContentNode(Node*, RenderNamedFlowThread*); 68 68 void unregisterNamedFlowContentNode(Node*); 69 bool isContentNodeRegisteredWithAnyNamedFlow(Node*) const;70 69 71 70 bool hasFlowThreadsWithAutoLogicalHeightRegions() const { return m_flowThreadsWithAutoLogicalHeightRegions; } -
trunk/Source/WebCore/rendering/RenderObject.h
r147940 r147983 252 252 ////////////////////////////////////////// 253 253 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).255 254 virtual bool canHaveGeneratedChildren() const; 256 255 virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; } -
trunk/Source/WebCore/rendering/RenderRegion.h
r147756 r147983 146 146 147 147 virtual bool canHaveChildren() const OVERRIDE { return false; } 148 virtual bool canDOMChildrenHaveRenderParent() const OVERRIDE { return true; }149 148 150 149 virtual void insertedIntoTree() OVERRIDE; -
trunk/Source/WebCore/svg/SVGElement.cpp
r147756 r147983 451 451 452 452 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);459 453 } 460 454 -
trunk/Source/WebCore/svg/SVGElement.h
r147756 r147983 121 121 virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture) OVERRIDE; 122 122 123 virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle) OVERRIDE;124 125 123 protected: 126 124 SVGElement(const QualifiedName&, Document*, ConstructionType = CreateSVGElement);
Note: See TracChangeset
for help on using the changeset viewer.