Changeset 128331 in webkit
- Timestamp:
- Sep 12, 2012 9:54:55 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r128329 r128331 1 2012-09-11 MORITA Hajime <morrita@google.com> 2 3 [Scoped Style] NodeRareData::m_numberOfScopedHTMLStyleChildren could be replaced with a node flag. 4 https://bugs.webkit.org/show_bug.cgi?id=96450 5 6 Reviewed by Dimitri Glazkov. 7 8 This change gets rid of NodeRareData::m_numberOfScopedHTMLStyleChildren 9 by replacing it with a Node flag called HasScopedHTMLStyleChildFlag. 10 Instead of tracking the number of certain node, this chagne compute the number 11 when necessary. 12 13 Now we no longer need to hit rareData() for each hasScopedHTMLStyleChild() call. 14 Note that because such a re-counting occurs only when the scoped <style> elements 15 leave the tree, the performance impact is negligible. 16 17 No new tests. Covered by existing tests. 18 19 * dom/Node.cpp: 20 (WebCore): 21 * dom/Node.h: 22 (WebCore::Node::hasScopedHTMLStyleChild): 23 (WebCore::Node::setHasScopedHTMLStyleChild): 24 (Node): 25 * dom/NodeRareData.h: 26 (WebCore::NodeRareData::NodeRareData): 27 (NodeRareData): 28 * html/HTMLStyleElement.cpp: 29 (WebCore::HTMLStyleElement::isRegisteredAsScoped): 30 (WebCore): 31 (WebCore::Node::registerScopedHTMLStyleChild): 32 (WebCore::Node::unregisterScopedHTMLStyleChild): 33 (WebCore::Node::numberOfScopedHTMLStyleChildren): 34 (WebCore::HTMLStyleElement::unregisterWithScopingNode): 35 * html/HTMLStyleElement.h: 36 (HTMLStyleElement): 37 1 38 2012-09-12 Dimitri Glazkov <dglazkov@chromium.org> 2 39 -
trunk/Source/WebCore/dom/Node.cpp
r128006 r128331 2536 2536 #endif // ENABLE(MUTATION_OBSERVERS) 2537 2537 2538 #if ENABLE(STYLE_SCOPED)2539 bool Node::hasScopedHTMLStyleChild() const2540 {2541 return hasRareData() && rareData()->hasScopedHTMLStyleChild();2542 }2543 2544 size_t Node::numberOfScopedHTMLStyleChildren() const2545 {2546 return hasRareData() ? rareData()->numberOfScopedHTMLStyleChildren() : 0;2547 }2548 2549 void Node::registerScopedHTMLStyleChild()2550 {2551 ensureRareData()->registerScopedHTMLStyleChild();2552 }2553 2554 void Node::unregisterScopedHTMLStyleChild()2555 {2556 ASSERT(hasRareData());2557 if (hasRareData())2558 rareData()->unregisterScopedHTMLStyleChild();2559 }2560 #else2561 bool Node::hasScopedHTMLStyleChild() const2562 {2563 return 0;2564 }2565 2566 size_t Node::numberOfScopedHTMLStyleChildren() const2567 {2568 return 0;2569 }2570 #endif2571 2572 2538 void Node::handleLocalEvents(Event* event) 2573 2539 { -
trunk/Source/WebCore/dom/Node.h
r128006 r128331 350 350 void clearHasAttrList() { clearFlag(HasAttrListFlag); } 351 351 352 bool hasScopedHTMLStyleChild() const { return getFlag(HasScopedHTMLStyleChildFlag); } 353 void setHasScopedHTMLStyleChild(bool flag) { setFlag(flag, HasScopedHTMLStyleChildFlag); } 354 352 355 enum ShouldSetAttached { 353 356 SetAttached, … … 659 662 #endif // ENABLE(MUTATION_OBSERVERS) 660 663 661 #if ENABLE(STYLE_SCOPED)662 664 void registerScopedHTMLStyleChild(); 663 665 void unregisterScopedHTMLStyleChild(); 664 #endif665 bool hasScopedHTMLStyleChild() const;666 666 size_t numberOfScopedHTMLStyleChildren() const; 667 667 … … 711 711 InNamedFlowFlag = 1 << 26, 712 712 HasAttrListFlag = 1 << 27, 713 HasCustomCallbacksFlag = 1 << 28 713 HasCustomCallbacksFlag = 1 << 28, 714 HasScopedHTMLStyleChildFlag = 1 << 29 714 715 }; 715 716 716 // 4bits remaining717 // 3 bits remaining 717 718 718 719 bool getFlag(NodeFlags mask) const { return m_nodeFlags & mask; } -
trunk/Source/WebCore/dom/NodeRareData.h
r126926 r128331 187 187 , m_isFocused(false) 188 188 , m_needsFocusAppearanceUpdateSoonAfterAttach(false) 189 #if ENABLE(STYLE_SCOPED)190 , m_numberOfScopedHTMLStyleChildren(0)191 #endif192 189 { 193 190 } … … 309 306 310 307 m_itemType->setValue(value); 311 }312 #endif313 314 #if ENABLE(STYLE_SCOPED)315 void registerScopedHTMLStyleChild()316 {317 ++m_numberOfScopedHTMLStyleChildren;318 }319 320 void unregisterScopedHTMLStyleChild()321 {322 ASSERT(m_numberOfScopedHTMLStyleChildren > 0);323 if (m_numberOfScopedHTMLStyleChildren > 0)324 --m_numberOfScopedHTMLStyleChildren;325 }326 327 bool hasScopedHTMLStyleChild() const328 {329 return m_numberOfScopedHTMLStyleChildren;330 }331 332 size_t numberOfScopedHTMLStyleChildren() const333 {334 return m_numberOfScopedHTMLStyleChildren;335 308 } 336 309 #endif … … 365 338 mutable RefPtr<DOMSettableTokenList> m_itemType; 366 339 #endif 367 368 #if ENABLE(STYLE_SCOPED)369 size_t m_numberOfScopedHTMLStyleChildren;370 #endif371 340 }; 372 341 -
trunk/Source/WebCore/html/HTMLStyleElement.cpp
r121344 r128331 124 124 125 125 #if ENABLE(STYLE_SCOPED) 126 inline bool HTMLStyleElement::isRegisteredAsScoped() const 127 { 128 // Note: We cannot rely on the 'scoped' attribute still being present when this method is invoked. 129 // Therefore we cannot rely on scoped()! 130 if (m_scopedStyleRegistrationState == NotRegistered) 131 return false; 132 if (!ContextFeatures::styleScopedEnabled(document())) 133 return false; 134 return true; 135 } 136 137 // These three Node methods are placed here to 138 // make the header inclusion dependency sane. 139 140 inline void Node::registerScopedHTMLStyleChild() 141 { 142 setHasScopedHTMLStyleChild(true); 143 } 144 145 inline void Node::unregisterScopedHTMLStyleChild() 146 { 147 ASSERT(hasScopedHTMLStyleChild()); 148 setHasScopedHTMLStyleChild(numberOfScopedHTMLStyleChildren()); 149 } 150 151 size_t Node::numberOfScopedHTMLStyleChildren() const 152 { 153 size_t count = 0; 154 for (Node* child = firstChild(); child; child = child->nextSibling()) { 155 if (child->hasTagName(styleTag) && static_cast<HTMLStyleElement*>(child)->isRegisteredAsScoped()) 156 count++; 157 } 158 159 return count; 160 } 161 126 162 void HTMLStyleElement::registerWithScopingNode(bool scoped) 127 163 { … … 155 191 void HTMLStyleElement::unregisterWithScopingNode(ContainerNode* scope) 156 192 { 157 // Note: We cannot rely on the 'scoped' element still being present when this method is invoked.158 // Therefore we cannot rely on scoped()!159 193 ASSERT(m_scopedStyleRegistrationState != NotRegistered || !ContextFeatures::styleScopedEnabled(document())); 160 if (m_scopedStyleRegistrationState == NotRegistered) 161 return; 162 if (!ContextFeatures::styleScopedEnabled(document())) 194 if (!isRegisteredAsScoped()) 163 195 return; 164 196 … … 173 205 174 206 m_scopedStyleRegistrationState = NotRegistered; 207 } 208 #else 209 size_t Node::numberOfScopedHTMLStyleChildren() const 210 { 211 return 0; 175 212 } 176 213 #endif -
trunk/Source/WebCore/html/HTMLStyleElement.h
r120062 r128331 46 46 void setScoped(bool); 47 47 Element* scopingElement() const; 48 bool isRegisteredAsScoped() const; 48 49 #endif 49 50
Note: See TracChangeset
for help on using the changeset viewer.