⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 248807 in webkit


Ignore:
Timestamp:
Aug 16, 2019, 5:41:04 PM (7 years ago)
Author:
rniwa@webkit.org
Message:

Don't use union to store NodeRareData* and RenderObject*
https://bugs.webkit.org/show_bug.cgi?id=200744

Reviewed by Antti Koivisto.

Source/WebCore:

This patch undoes unioning of NodeRareData* and RenderObject* in Node introduced in r133372 in order
to eliminate any possibility of type confusion bugs. Instead of re-introducing the global map, which
is known to be slow, this patch simply adds an extra pointer for NodeRareData: Node::m_rareData.

To compensate for the increased memory usage due to a new pointer type in Node, this patch also packs
the style related flags in ElementRareData, which is the most common reason for which ElementRareData
is created, into RenderObject* pointer using CompactPointerTuple as Node::m_rendererWithStyleFlags.

Unfortunately, there are 9 style related flags and they won't all fit into the single byte provided
by CompactPointerTuple. Luckily, this patch also eliminates the need for HasRareDataFlag as m_rareData
knows whether a node has rare data or not so we re-use that bitflag space for the extra one flag.

No new tests since there should be no observable behavioral change from this.

  • cssjit/SelectorCompiler.cpp:

(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild): Check the nullity of
m_rareData directly instead of checking HasRareDataFlag, which has been removed.

  • dom/Element.cpp:

(WebCore::Element::setStyleAffectedByEmpty): Deleted.
(WebCore::Element::setStyleAffectedByFocusWithin): Deleted.
(WebCore::Element::setStyleAffectedByActive): Deleted.
(WebCore::Element::setChildrenAffectedByDrag): Deleted.
(WebCore::Element::setChildrenAffectedByForwardPositionalRules): Deleted.
(WebCore::Element::setDescendantsAffectedByForwardPositionalRules): Deleted.
(WebCore::Element::setChildrenAffectedByBackwardPositionalRules): Deleted.
(WebCore::Element::setDescendantsAffectedByBackwardPositionalRules): Deleted.
(WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Deleted.
(WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
(WebCore::Element::resetStyleRelations): Clear the flags in m_rendererWithStyleFlags and m_nodeFlags.
(WebCore::Element::rareDataStyleAffectedByEmpty const): Deleted.
(WebCore::Element::rareDataStyleAffectedByFocusWithin const): Deleted.
(WebCore::Element::rareDataStyleAffectedByActive const): Deleted.
(WebCore::Element::rareDataChildrenAffectedByDrag const): Deleted.
(WebCore::Element::rareDataChildrenAffectedByForwardPositionalRules const): Deleted.
(WebCore::Element::rareDataDescendantsAffectedByForwardPositionalRules const): Deleted.
(WebCore::Element::rareDataChildrenAffectedByBackwardPositionalRules const): Deleted.
(WebCore::Element::rareDataDescendantsAffectedByBackwardPositionalRules const): Deleted.
(WebCore::Element::rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules const): Deleted.

  • dom/Element.h:

(WebCore::Element::styleAffectedByActive const): Now uses m_rendererWithStyleFlags.
(WebCore::Element::styleAffectedByEmpty const): Ditto.
(WebCore::Element::styleAffectedByFocusWithin const): Now uses m_nodeFlags.
(WebCore::Element::childrenAffectedByDrag const): Now uses m_rendererWithStyleFlags.
(WebCore::Element::childrenAffectedByForwardPositionalRules const): Ditto.
(WebCore::Element::descendantsAffectedByForwardPositionalRules const): Ditto.
(WebCore::Element::childrenAffectedByBackwardPositionalRules const): Ditto.
(WebCore::Element::descendantsAffectedByBackwardPositionalRules const): Ditto.
(WebCore::Element::childrenAffectedByPropertyBasedBackwardPositionalRules const): Ditto.
(WebCore::Element::setStyleAffectedByEmpty): Now stores into m_rendererWithStyleFlags.
(WebCore::Element::setStyleAffectedByFocusWithin): Now uses m_nodeFlags.
(WebCore::Element::setDescendantsAffectedByPreviousSibling): Removed const qualifier & useless return.
(WebCore::Element::setStyleAffectedByActive): Now stores into m_rendererWithStyleFlags.
(WebCore::Element::setChildrenAffectedByDrag): Ditto.
(WebCore::Element::setChildrenAffectedByForwardPositionalRules): Ditto.
(WebCore::Element::setDescendantsAffectedByForwardPositionalRules): Ditto.
(WebCore::Element::setChildrenAffectedByBackwardPositionalRules): Ditto.
(WebCore::Element::setDescendantsAffectedByBackwardPositionalRules): Ditto.
(WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Ditto.

  • dom/ElementRareData.h:

(WebCore::ElementRareData::styleAffectedByActive const): Deleted.
(WebCore::ElementRareData::setStyleAffectedByActive): Deleted.
(WebCore::ElementRareData::styleAffectedByEmpty const): Deleted.
(WebCore::ElementRareData::setStyleAffectedByEmpty): Deleted.
(WebCore::ElementRareData::styleAffectedByFocusWithin const): Deleted.
(WebCore::ElementRareData::setStyleAffectedByFocusWithin): Deleted.
(WebCore::ElementRareData::childrenAffectedByDrag const): Deleted.
(WebCore::ElementRareData::setChildrenAffectedByDrag): Deleted.
(WebCore::ElementRareData::childrenAffectedByLastChildRules const): Deleted.
(WebCore::ElementRareData::setChildrenAffectedByLastChildRules): Deleted.
(WebCore::ElementRareData::childrenAffectedByForwardPositionalRules const): Deleted.
(WebCore::ElementRareData::setChildrenAffectedByForwardPositionalRules): Deleted.
(WebCore::ElementRareData::descendantsAffectedByForwardPositionalRules const): Deleted.
(WebCore::ElementRareData::setDescendantsAffectedByForwardPositionalRules): Deleted.
(WebCore::ElementRareData::childrenAffectedByBackwardPositionalRules const): Deleted.
(WebCore::ElementRareData::setChildrenAffectedByBackwardPositionalRules): Deleted.
(WebCore::ElementRareData::descendantsAffectedByBackwardPositionalRules const): Deleted.
(WebCore::ElementRareData::setDescendantsAffectedByBackwardPositionalRules): Deleted.
(WebCore::ElementRareData::childrenAffectedByPropertyBasedBackwardPositionalRules const): Deleted.
(WebCore::ElementRareData::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Deleted.
(WebCore::ElementRareData::useTypes const): Removed UseType::StyleFlags.
(WebCore::ElementRareData::ElementRareData): No longer takes RenderElement*.
(WebCore::ElementRareData::resetStyleRelations): Only re-sets child index now since that's all left.

  • dom/Node.cpp:

(WebCore::stringForRareDataUseType): Removed UseType::StyleFlags since there is no style related
flags in ElementRareData.
(WebCore::Node::materializeRareData): Simplified now that m_rareData is not a union.
(WebCore::Node::clearRareData): Ditto.

  • dom/Node.h:

(WebCore::NodeRareDataBase): Deleted.
(WebCore::Node::renderer const):
(WebCore::Node::rareDataMemoryOffset):
(WebCore::Node::flagHasRareData): Deleted.
(WebCore::Node::NodeFlags): Replaced HasRareDataFlag with StyleAffectedByFocusWithinFlag.
(WebCore::Node::ElementStyleFlag): Added.
(WebCore::Node::hasStyleFlag const): Added. Checks a reprense of a flag in m_rendererWithStyleFlags.
(WebCore::Node::setStyleFlag): Ditto for setting a flag.
(WebCore::Node::clearStyleFlags): Ditto for clearing all flags.
(WebCore::Node::hasRareData const): Now checks the nullity of m_rareData directly.
(WebCore::Node::rareData const):

  • dom/NodeRareData.cpp: The size of NodeRareData is shrunk by one pointer.
  • dom/NodeRareData.h:

(WebCore::NodeRareData::NodeRareData): No longer inherits from NodeRareDataBase which was needed to
to store RenderObject*.
(WebCore::Node::rareData const): Moved to Node.h.

  • rendering/RenderObject.h:

(WebCore::Node::setRenderer): Moved from Node.h since CompactPointerTuple::setPointer has the
aforementioned static_assert which requires the definition of RenderObject.

Source/WTF:

Moved the static assert which requires the type of the object to which the pointer type points
into setPointer so that we can use CompactPointerTuple<T*, U> as a member variable
with just a forward declaration of T.

  • wtf/CompactPointerTuple.h:

(WTF::CompactPointerTuple::setPointer):

Location:
trunk/Source
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r248759 r248807  
     12019-08-15  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Don't use union to store NodeRareData* and RenderObject*
     4        https://bugs.webkit.org/show_bug.cgi?id=200744
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Moved the static assert which requires the type of the object to which the pointer type points
     9        into setPointer so that we can use CompactPointerTuple<T*, U> as a member variable
     10        with just a forward declaration of T.
     11
     12        * wtf/CompactPointerTuple.h:
     13        (WTF::CompactPointerTuple::setPointer):
     14
    1152019-08-15  Zalan Bujtas  <zalan@apple.com>
    216
  • trunk/Source/WTF/wtf/CompactPointerTuple.h

    r248546 r248807  
    4141    static_assert(sizeof(Type) == 1, "");
    4242    static_assert(std::is_pointer<PointerType>::value, "");
    43     static_assert(alignof(typename std::remove_pointer<PointerType>::type) >= alignof(void*), "");
    4443    static_assert(std::is_integral<Type>::value || std::is_enum<Type>::value, "");
    4544
     
    7271    void setPointer(PointerType pointer)
    7372    {
     73        static_assert(alignof(typename std::remove_pointer<PointerType>::type) >= alignof(void*), "");
    7474        ASSERT((bitwise_cast<uint64_t>(pointer) & 0b111) == 0x0);
    7575        m_data = CompactPointerTuple(pointer, type()).m_data;
  • trunk/Source/WebCore/ChangeLog

    r248805 r248807  
     12019-08-15  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Don't use union to store NodeRareData* and RenderObject*
     4        https://bugs.webkit.org/show_bug.cgi?id=200744
     5
     6        Reviewed by Antti Koivisto.
     7
     8        This patch undoes unioning of NodeRareData* and RenderObject* in Node introduced in r133372 in order
     9        to eliminate any possibility of type confusion bugs. Instead of re-introducing the global map, which
     10        is known to be slow, this patch simply adds an extra pointer for NodeRareData: Node::m_rareData.
     11
     12        To compensate for the increased memory usage due to a new pointer type in Node, this patch also packs
     13        the style related flags in ElementRareData, which is the most common reason for which ElementRareData
     14        is created, into RenderObject* pointer using CompactPointerTuple as Node::m_rendererWithStyleFlags.
     15
     16        Unfortunately, there are 9 style related flags and they won't all fit into the single byte provided
     17        by CompactPointerTuple. Luckily, this patch also eliminates the need for HasRareDataFlag as m_rareData
     18        knows whether a node has rare data or not so we re-use that bitflag space for the extra one flag.
     19
     20        No new tests since there should be no observable behavioral change from this.
     21
     22        * cssjit/SelectorCompiler.cpp:
     23        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild): Check the nullity of
     24        m_rareData directly instead of checking HasRareDataFlag, which has been removed.
     25        * dom/Element.cpp:
     26        (WebCore::Element::setStyleAffectedByEmpty): Deleted.
     27        (WebCore::Element::setStyleAffectedByFocusWithin): Deleted.
     28        (WebCore::Element::setStyleAffectedByActive): Deleted.
     29        (WebCore::Element::setChildrenAffectedByDrag): Deleted.
     30        (WebCore::Element::setChildrenAffectedByForwardPositionalRules): Deleted.
     31        (WebCore::Element::setDescendantsAffectedByForwardPositionalRules): Deleted.
     32        (WebCore::Element::setChildrenAffectedByBackwardPositionalRules): Deleted.
     33        (WebCore::Element::setDescendantsAffectedByBackwardPositionalRules): Deleted.
     34        (WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Deleted.
     35        (WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
     36        (WebCore::Element::resetStyleRelations): Clear the flags in m_rendererWithStyleFlags and m_nodeFlags.
     37        (WebCore::Element::rareDataStyleAffectedByEmpty const): Deleted.
     38        (WebCore::Element::rareDataStyleAffectedByFocusWithin const): Deleted.
     39        (WebCore::Element::rareDataStyleAffectedByActive const): Deleted.
     40        (WebCore::Element::rareDataChildrenAffectedByDrag const): Deleted.
     41        (WebCore::Element::rareDataChildrenAffectedByForwardPositionalRules const): Deleted.
     42        (WebCore::Element::rareDataDescendantsAffectedByForwardPositionalRules const): Deleted.
     43        (WebCore::Element::rareDataChildrenAffectedByBackwardPositionalRules const): Deleted.
     44        (WebCore::Element::rareDataDescendantsAffectedByBackwardPositionalRules const): Deleted.
     45        (WebCore::Element::rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules const): Deleted.
     46        * dom/Element.h:
     47        (WebCore::Element::styleAffectedByActive const): Now uses m_rendererWithStyleFlags.
     48        (WebCore::Element::styleAffectedByEmpty const): Ditto.
     49        (WebCore::Element::styleAffectedByFocusWithin const): Now uses m_nodeFlags.
     50        (WebCore::Element::childrenAffectedByDrag const): Now uses m_rendererWithStyleFlags.
     51        (WebCore::Element::childrenAffectedByForwardPositionalRules const): Ditto.
     52        (WebCore::Element::descendantsAffectedByForwardPositionalRules const): Ditto.
     53        (WebCore::Element::childrenAffectedByBackwardPositionalRules const): Ditto.
     54        (WebCore::Element::descendantsAffectedByBackwardPositionalRules const): Ditto.
     55        (WebCore::Element::childrenAffectedByPropertyBasedBackwardPositionalRules const): Ditto.
     56        (WebCore::Element::setStyleAffectedByEmpty): Now stores into m_rendererWithStyleFlags.
     57        (WebCore::Element::setStyleAffectedByFocusWithin): Now uses m_nodeFlags.
     58        (WebCore::Element::setDescendantsAffectedByPreviousSibling): Removed const qualifier & useless return.
     59        (WebCore::Element::setStyleAffectedByActive): Now stores into m_rendererWithStyleFlags.
     60        (WebCore::Element::setChildrenAffectedByDrag): Ditto.
     61        (WebCore::Element::setChildrenAffectedByForwardPositionalRules): Ditto.
     62        (WebCore::Element::setDescendantsAffectedByForwardPositionalRules): Ditto.
     63        (WebCore::Element::setChildrenAffectedByBackwardPositionalRules): Ditto.
     64        (WebCore::Element::setDescendantsAffectedByBackwardPositionalRules): Ditto.
     65        (WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Ditto.
     66        * dom/ElementRareData.h:
     67        (WebCore::ElementRareData::styleAffectedByActive const): Deleted.
     68        (WebCore::ElementRareData::setStyleAffectedByActive): Deleted.
     69        (WebCore::ElementRareData::styleAffectedByEmpty const): Deleted.
     70        (WebCore::ElementRareData::setStyleAffectedByEmpty): Deleted.
     71        (WebCore::ElementRareData::styleAffectedByFocusWithin const): Deleted.
     72        (WebCore::ElementRareData::setStyleAffectedByFocusWithin): Deleted.
     73        (WebCore::ElementRareData::childrenAffectedByDrag const): Deleted.
     74        (WebCore::ElementRareData::setChildrenAffectedByDrag): Deleted.
     75        (WebCore::ElementRareData::childrenAffectedByLastChildRules const): Deleted.
     76        (WebCore::ElementRareData::setChildrenAffectedByLastChildRules): Deleted.
     77        (WebCore::ElementRareData::childrenAffectedByForwardPositionalRules const): Deleted.
     78        (WebCore::ElementRareData::setChildrenAffectedByForwardPositionalRules): Deleted.
     79        (WebCore::ElementRareData::descendantsAffectedByForwardPositionalRules const): Deleted.
     80        (WebCore::ElementRareData::setDescendantsAffectedByForwardPositionalRules): Deleted.
     81        (WebCore::ElementRareData::childrenAffectedByBackwardPositionalRules const): Deleted.
     82        (WebCore::ElementRareData::setChildrenAffectedByBackwardPositionalRules): Deleted.
     83        (WebCore::ElementRareData::descendantsAffectedByBackwardPositionalRules const): Deleted.
     84        (WebCore::ElementRareData::setDescendantsAffectedByBackwardPositionalRules): Deleted.
     85        (WebCore::ElementRareData::childrenAffectedByPropertyBasedBackwardPositionalRules const): Deleted.
     86        (WebCore::ElementRareData::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Deleted.
     87        (WebCore::ElementRareData::useTypes const): Removed UseType::StyleFlags.
     88        (WebCore::ElementRareData::ElementRareData): No longer takes RenderElement*.
     89        (WebCore::ElementRareData::resetStyleRelations): Only re-sets child index now since that's all left.
     90        * dom/Node.cpp:
     91        (WebCore::stringForRareDataUseType): Removed UseType::StyleFlags since there is no style related
     92        flags in ElementRareData.
     93        (WebCore::Node::materializeRareData): Simplified now that m_rareData is not a union.
     94        (WebCore::Node::clearRareData): Ditto.
     95        * dom/Node.h:
     96        (WebCore::NodeRareDataBase): Deleted.
     97        (WebCore::Node::renderer const):
     98        (WebCore::Node::rareDataMemoryOffset):
     99        (WebCore::Node::flagHasRareData): Deleted.
     100        (WebCore::Node::NodeFlags): Replaced HasRareDataFlag with StyleAffectedByFocusWithinFlag.
     101        (WebCore::Node::ElementStyleFlag): Added.
     102        (WebCore::Node::hasStyleFlag const): Added. Checks a reprense of a flag in m_rendererWithStyleFlags.
     103        (WebCore::Node::setStyleFlag): Ditto for setting a flag.
     104        (WebCore::Node::clearStyleFlags): Ditto for clearing all flags.
     105        (WebCore::Node::hasRareData const): Now checks the nullity of m_rareData directly.
     106        (WebCore::Node::rareData const):
     107        * dom/NodeRareData.cpp: The size of NodeRareData is shrunk by one pointer.
     108        * dom/NodeRareData.h:
     109        (WebCore::NodeRareData::NodeRareData): No longer inherits from NodeRareDataBase which was needed to
     110        to store RenderObject*.
     111        (WebCore::Node::rareData const): Moved to Node.h.
     112        * rendering/RenderObject.h:
     113        (WebCore::Node::setRenderer): Moved from Node.h since CompactPointerTuple::setPointer has the
     114        aforementioned static_assert which requires the definition of RenderObject.
     115
    11162019-08-16  Saam Barati  <sbarati@apple.com>
    2117
  • trunk/Source/WebCore/cssjit/SelectorCompiler.cpp

    r248373 r248807  
    36033603        Assembler::JumpList noCachedChildIndexCases;
    36043604        generateWalkToPreviousAdjacentElement(noMoreSiblingsCases, previousSibling);
    3605         noCachedChildIndexCases.append(m_assembler.branchTest32(Assembler::Zero, Assembler::Address(previousSibling, Node::nodeFlagsMemoryOffset()), Assembler::TrustedImm32(Node::flagHasRareData())));
     3605
     3606        LocalRegister elementRareData(m_registerAllocator);
     3607        m_assembler.loadPtr(Assembler::Address(previousSibling, Node::rareDataMemoryOffset()), elementRareData);
     3608
     3609        noCachedChildIndexCases.append(m_assembler.branchTestPtr(Assembler::Zero, elementRareData));
    36063610        {
    3607             LocalRegister elementRareData(m_registerAllocator);
    3608             m_assembler.loadPtr(Assembler::Address(previousSibling, Node::rareDataMemoryOffset()), elementRareData);
    36093611            LocalRegister cachedChildIndex(m_registerAllocator);
    36103612            m_assembler.load16(Assembler::Address(elementRareData, ElementRareData::childIndexMemoryOffset()), cachedChildIndex);
  • trunk/Source/WebCore/dom/Element.cpp

    r248784 r248807  
    32203220}
    32213221
    3222 void Element::setStyleAffectedByEmpty()
    3223 {
    3224     ensureElementRareData().setStyleAffectedByEmpty(true);
    3225 }
    3226 
    3227 void Element::setStyleAffectedByFocusWithin()
    3228 {
    3229     ensureElementRareData().setStyleAffectedByFocusWithin(true);
    3230 }
    3231 
    3232 void Element::setStyleAffectedByActive()
    3233 {
    3234     ensureElementRareData().setStyleAffectedByActive(true);
    3235 }
    3236 
    3237 void Element::setChildrenAffectedByDrag()
    3238 {
    3239     ensureElementRareData().setChildrenAffectedByDrag(true);
    3240 }
    3241 
    3242 void Element::setChildrenAffectedByForwardPositionalRules()
    3243 {
    3244     ensureElementRareData().setChildrenAffectedByForwardPositionalRules(true);
    3245 }
    3246 
    3247 void Element::setDescendantsAffectedByForwardPositionalRules()
    3248 {
    3249     ensureElementRareData().setDescendantsAffectedByForwardPositionalRules(true);
    3250 }
    3251 
    3252 void Element::setChildrenAffectedByBackwardPositionalRules()
    3253 {
    3254     ensureElementRareData().setChildrenAffectedByBackwardPositionalRules(true);
    3255 }
    3256 
    3257 void Element::setDescendantsAffectedByBackwardPositionalRules()
    3258 {
    3259     ensureElementRareData().setDescendantsAffectedByBackwardPositionalRules(true);
    3260 }
    3261 
    3262 void Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules()
    3263 {
    3264     ensureElementRareData().setChildrenAffectedByPropertyBasedBackwardPositionalRules(true);
    3265 }
    3266 
    32673222void Element::setChildIndex(unsigned index)
    32683223{
     
    32733228bool Element::hasFlagsSetDuringStylingOfChildren() const
    32743229{
    3275     if (childrenAffectedByHover() || childrenAffectedByFirstChildRules() || childrenAffectedByLastChildRules())
    3276         return true;
    3277 
    3278     if (!hasRareData())
    3279         return false;
    3280     return rareDataStyleAffectedByActive()
    3281         || rareDataChildrenAffectedByDrag()
    3282         || rareDataChildrenAffectedByForwardPositionalRules()
    3283         || rareDataDescendantsAffectedByForwardPositionalRules()
    3284         || rareDataChildrenAffectedByBackwardPositionalRules()
    3285         || rareDataDescendantsAffectedByBackwardPositionalRules()
    3286         || rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules();
    3287 }
    3288 
    3289 bool Element::rareDataStyleAffectedByEmpty() const
    3290 {
    3291     ASSERT(hasRareData());
    3292     return elementRareData()->styleAffectedByEmpty();
    3293 }
    3294 
    3295 bool Element::rareDataStyleAffectedByFocusWithin() const
    3296 {
    3297     ASSERT(hasRareData());
    3298     return elementRareData()->styleAffectedByFocusWithin();
    3299 }
    3300 
    3301 bool Element::rareDataStyleAffectedByActive() const
    3302 {
    3303     ASSERT(hasRareData());
    3304     return elementRareData()->styleAffectedByActive();
    3305 }
    3306 
    3307 bool Element::rareDataChildrenAffectedByDrag() const
    3308 {
    3309     ASSERT(hasRareData());
    3310     return elementRareData()->childrenAffectedByDrag();
    3311 }
    3312 
    3313 bool Element::rareDataChildrenAffectedByForwardPositionalRules() const
    3314 {
    3315     ASSERT(hasRareData());
    3316     return elementRareData()->childrenAffectedByForwardPositionalRules();
    3317 }
    3318 
    3319 bool Element::rareDataDescendantsAffectedByForwardPositionalRules() const
    3320 {
    3321     ASSERT(hasRareData());
    3322     return elementRareData()->descendantsAffectedByForwardPositionalRules();
    3323 }
    3324 
    3325 bool Element::rareDataChildrenAffectedByBackwardPositionalRules() const
    3326 {
    3327     ASSERT(hasRareData());
    3328     return elementRareData()->childrenAffectedByBackwardPositionalRules();
    3329 }
    3330 
    3331 bool Element::rareDataDescendantsAffectedByBackwardPositionalRules() const
    3332 {
    3333     ASSERT(hasRareData());
    3334     return elementRareData()->descendantsAffectedByBackwardPositionalRules();
    3335 }
    3336 
    3337 bool Element::rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules() const
    3338 {
    3339     ASSERT(hasRareData());
    3340     return elementRareData()->childrenAffectedByPropertyBasedBackwardPositionalRules();
     3230    return styleAffectedByActive()
     3231        || childrenAffectedByHover()
     3232        || childrenAffectedByFirstChildRules()
     3233        || childrenAffectedByLastChildRules()
     3234        || childrenAffectedByDrag()
     3235        || childrenAffectedByForwardPositionalRules()
     3236        || descendantsAffectedByForwardPositionalRules()
     3237        || childrenAffectedByBackwardPositionalRules()
     3238        || descendantsAffectedByBackwardPositionalRules()
     3239        || childrenAffectedByPropertyBasedBackwardPositionalRules();
    33413240}
    33423241
     
    39713870void Element::resetStyleRelations()
    39723871{
     3872    // FIXME: Make this code more consistent.
     3873    clearFlag(StyleAffectedByFocusWithinFlag);
     3874    clearStyleFlags();
    39733875    if (!hasRareData())
    39743876        return;
  • trunk/Source/WebCore/dom/Element.h

    r248784 r248807  
    341341
    342342    // Methods for indicating the style is affected by dynamic updates (e.g., children changing, our position changing in our sibling list, etc.)
    343     bool styleAffectedByActive() const { return hasRareData() && rareDataStyleAffectedByActive(); }
    344     bool styleAffectedByEmpty() const { return hasRareData() && rareDataStyleAffectedByEmpty(); }
    345     bool styleAffectedByFocusWithin() const { return hasRareData() && rareDataStyleAffectedByFocusWithin(); }
     343    bool styleAffectedByActive() const { return hasStyleFlag(ElementStyleFlag::StyleAffectedByActive); }
     344    bool styleAffectedByEmpty() const { return hasStyleFlag(ElementStyleFlag::StyleAffectedByEmpty); }
     345    bool styleAffectedByFocusWithin() const { return getFlag(StyleAffectedByFocusWithinFlag); }
    346346    bool descendantsAffectedByPreviousSibling() const { return getFlag(DescendantsAffectedByPreviousSiblingFlag); }
    347347    bool childrenAffectedByHover() const { return getFlag(ChildrenAffectedByHoverRulesFlag); }
    348     bool childrenAffectedByDrag() const { return hasRareData() && rareDataChildrenAffectedByDrag(); }
     348    bool childrenAffectedByDrag() const { return hasStyleFlag(ElementStyleFlag::ChildrenAffectedByDrag); }
    349349    bool childrenAffectedByFirstChildRules() const { return getFlag(ChildrenAffectedByFirstChildRulesFlag); }
    350350    bool childrenAffectedByLastChildRules() const { return getFlag(ChildrenAffectedByLastChildRulesFlag); }
    351     bool childrenAffectedByForwardPositionalRules() const { return hasRareData() && rareDataChildrenAffectedByForwardPositionalRules(); }
    352     bool descendantsAffectedByForwardPositionalRules() const { return hasRareData() && rareDataDescendantsAffectedByForwardPositionalRules(); }
    353     bool childrenAffectedByBackwardPositionalRules() const { return hasRareData() && rareDataChildrenAffectedByBackwardPositionalRules(); }
    354     bool descendantsAffectedByBackwardPositionalRules() const { return hasRareData() && rareDataDescendantsAffectedByBackwardPositionalRules(); }
    355     bool childrenAffectedByPropertyBasedBackwardPositionalRules() const { return hasRareData() && rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules(); }
     351    bool childrenAffectedByForwardPositionalRules() const { return hasStyleFlag(ElementStyleFlag::ChildrenAffectedByForwardPositionalRules); }
     352    bool descendantsAffectedByForwardPositionalRules() const { return hasStyleFlag(ElementStyleFlag::DescendantsAffectedByForwardPositionalRules); }
     353    bool childrenAffectedByBackwardPositionalRules() const { return hasStyleFlag(ElementStyleFlag::ChildrenAffectedByBackwardPositionalRules); }
     354    bool descendantsAffectedByBackwardPositionalRules() const { return hasStyleFlag(ElementStyleFlag::DescendantsAffectedByBackwardPositionalRules); }
     355    bool childrenAffectedByPropertyBasedBackwardPositionalRules() const { return hasStyleFlag(ElementStyleFlag::ChildrenAffectedByPropertyBasedBackwardPositionalRules); }
    356356    bool affectsNextSiblingElementStyle() const { return getFlag(AffectsNextSiblingElementStyle); }
    357357    unsigned childIndex() const { return hasRareData() ? rareDataChildIndex() : 0; }
     
    359359    bool hasFlagsSetDuringStylingOfChildren() const;
    360360
    361     void setStyleAffectedByEmpty();
    362     void setStyleAffectedByFocusWithin();
    363     void setDescendantsAffectedByPreviousSibling() const { return setFlag(DescendantsAffectedByPreviousSiblingFlag); }
     361    void setStyleAffectedByEmpty() { setStyleFlag(ElementStyleFlag::StyleAffectedByEmpty); }
     362    void setStyleAffectedByFocusWithin() { setFlag(StyleAffectedByFocusWithinFlag); }
     363    void setDescendantsAffectedByPreviousSibling() { setFlag(DescendantsAffectedByPreviousSiblingFlag); }
    364364    void setChildrenAffectedByHover() { setFlag(ChildrenAffectedByHoverRulesFlag); }
    365     void setStyleAffectedByActive();
    366     void setChildrenAffectedByDrag();
     365    void setStyleAffectedByActive() { setStyleFlag(ElementStyleFlag::StyleAffectedByActive); }
     366    void setChildrenAffectedByDrag() { setStyleFlag(ElementStyleFlag::ChildrenAffectedByDrag); }
    367367    void setChildrenAffectedByFirstChildRules() { setFlag(ChildrenAffectedByFirstChildRulesFlag); }
    368368    void setChildrenAffectedByLastChildRules() { setFlag(ChildrenAffectedByLastChildRulesFlag); }
    369     void setChildrenAffectedByForwardPositionalRules();
    370     void setDescendantsAffectedByForwardPositionalRules();
    371     void setChildrenAffectedByBackwardPositionalRules();
    372     void setDescendantsAffectedByBackwardPositionalRules();
    373     void setChildrenAffectedByPropertyBasedBackwardPositionalRules();
     369    void setChildrenAffectedByForwardPositionalRules() { setStyleFlag(ElementStyleFlag::ChildrenAffectedByForwardPositionalRules); }
     370    void setDescendantsAffectedByForwardPositionalRules() { setStyleFlag(ElementStyleFlag::DescendantsAffectedByForwardPositionalRules); }
     371    void setChildrenAffectedByBackwardPositionalRules() { setStyleFlag(ElementStyleFlag::ChildrenAffectedByBackwardPositionalRules); }
     372    void setDescendantsAffectedByBackwardPositionalRules() { setStyleFlag(ElementStyleFlag::DescendantsAffectedByBackwardPositionalRules); }
     373    void setChildrenAffectedByPropertyBasedBackwardPositionalRules() { setStyleFlag(ElementStyleFlag::ChildrenAffectedByPropertyBasedBackwardPositionalRules); }
    374374    void setAffectsNextSiblingElementStyle() { setFlag(AffectsNextSiblingElementStyle); }
    375375    void setStyleIsAffectedByPreviousSibling() { setFlag(StyleIsAffectedByPreviousSibling); }
     
    696696    const RenderStyle& resolvePseudoElementStyle(PseudoId);
    697697
    698     bool rareDataStyleAffectedByEmpty() const;
    699     bool rareDataStyleAffectedByFocusWithin() const;
    700     bool rareDataChildrenAffectedByHover() const;
    701     bool rareDataStyleAffectedByActive() const;
    702     bool rareDataChildrenAffectedByDrag() const;
    703     bool rareDataChildrenAffectedByLastChildRules() const;
    704     bool rareDataChildrenAffectedByForwardPositionalRules() const;
    705     bool rareDataDescendantsAffectedByForwardPositionalRules() const;
    706     bool rareDataChildrenAffectedByBackwardPositionalRules() const;
    707     bool rareDataDescendantsAffectedByBackwardPositionalRules() const;
    708     bool rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules() const;
    709698    unsigned rareDataChildIndex() const;
    710699
  • trunk/Source/WebCore/dom/ElementRareData.h

    r248784 r248807  
    4343class ElementRareData : public NodeRareData {
    4444public:
    45     explicit ElementRareData(RenderElement*);
     45    explicit ElementRareData();
    4646    ~ElementRareData();
    4747
     
    6060    void clearTabIndexExplicitly() { m_tabIndex = 0; m_tabIndexWasSetExplicitly = false; }
    6161
    62     bool styleAffectedByActive() const { return m_styleAffectedByActive; }
    63     void setStyleAffectedByActive(bool value) { m_styleAffectedByActive = value; }
    64 
    65     bool styleAffectedByEmpty() const { return m_styleAffectedByEmpty; }
    66     void setStyleAffectedByEmpty(bool value) { m_styleAffectedByEmpty = value; }
    67 
    68     bool styleAffectedByFocusWithin() const { return m_styleAffectedByFocusWithin; }
    69     void setStyleAffectedByFocusWithin(bool value) { m_styleAffectedByFocusWithin = value; }
    70 
    7162#if ENABLE(FULLSCREEN_API)
    7263    bool containsFullScreenElement() { return m_containsFullScreenElement; }
    7364    void setContainsFullScreenElement(bool value) { m_containsFullScreenElement = value; }
    7465#endif
    75 
    76     bool childrenAffectedByDrag() const { return m_childrenAffectedByDrag; }
    77     void setChildrenAffectedByDrag(bool value) { m_childrenAffectedByDrag = value; }
    78 
    79     bool childrenAffectedByLastChildRules() const { return m_childrenAffectedByLastChildRules; }
    80     void setChildrenAffectedByLastChildRules(bool value) { m_childrenAffectedByLastChildRules = value; }
    81     bool childrenAffectedByForwardPositionalRules() const { return m_childrenAffectedByForwardPositionalRules; }
    82     void setChildrenAffectedByForwardPositionalRules(bool value) { m_childrenAffectedByForwardPositionalRules = value; }
    83     bool descendantsAffectedByForwardPositionalRules() const { return m_descendantsAffectedByForwardPositionalRules; }
    84     void setDescendantsAffectedByForwardPositionalRules(bool value) { m_descendantsAffectedByForwardPositionalRules = value; }
    85     bool childrenAffectedByBackwardPositionalRules() const { return m_childrenAffectedByBackwardPositionalRules; }
    86     void setChildrenAffectedByBackwardPositionalRules(bool value) { m_childrenAffectedByBackwardPositionalRules = value; }
    87     bool descendantsAffectedByBackwardPositionalRules() const { return m_descendantsAffectedByBackwardPositionalRules; }
    88     void setDescendantsAffectedByBackwardPositionalRules(bool value) { m_descendantsAffectedByBackwardPositionalRules = value; }
    89     bool childrenAffectedByPropertyBasedBackwardPositionalRules() const { return m_childrenAffectedByPropertyBasedBackwardPositionalRules; }
    90     void setChildrenAffectedByPropertyBasedBackwardPositionalRules(bool value) { m_childrenAffectedByPropertyBasedBackwardPositionalRules = value; }
    9166
    9267    unsigned childIndex() const { return m_childIndex; }
     
    149124        if (m_tabIndexWasSetExplicitly)
    150125            result.add(UseType::TabIndex);
    151         if (m_styleAffectedByActive || m_styleAffectedByEmpty || m_styleAffectedByFocusWithin || m_childrenAffectedByHover
    152             || m_childrenAffectedByDrag || m_childrenAffectedByLastChildRules || m_childrenAffectedByForwardPositionalRules
    153             || m_descendantsAffectedByForwardPositionalRules || m_childrenAffectedByBackwardPositionalRules
    154             || m_descendantsAffectedByBackwardPositionalRules || m_childrenAffectedByPropertyBasedBackwardPositionalRules)
    155             result.add(UseType::StyleFlags);
    156126        if (m_minimumSizeForResizing != defaultMinimumSizeForResizing())
    157127            result.add(UseType::MinimumSize);
     
    186156    unsigned short m_childIndex;
    187157    unsigned m_tabIndexWasSetExplicitly : 1;
    188     unsigned m_styleAffectedByActive : 1;
    189     unsigned m_styleAffectedByEmpty : 1;
    190     unsigned m_styleAffectedByFocusWithin : 1;
    191158#if ENABLE(FULLSCREEN_API)
    192159    unsigned m_containsFullScreenElement : 1;
     
    195162    unsigned m_hasCSSAnimation : 1;
    196163    unsigned m_hasElementIdentifier : 1;
    197     unsigned m_childrenAffectedByHover : 1;
    198     unsigned m_childrenAffectedByDrag : 1;
    199     // Bits for dynamic child matching.
    200     // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
    201     // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
    202     unsigned m_childrenAffectedByLastChildRules : 1;
    203     unsigned m_childrenAffectedByForwardPositionalRules : 1;
    204     unsigned m_descendantsAffectedByForwardPositionalRules : 1;
    205     unsigned m_childrenAffectedByBackwardPositionalRules : 1;
    206     unsigned m_descendantsAffectedByBackwardPositionalRules : 1;
    207     unsigned m_childrenAffectedByPropertyBasedBackwardPositionalRules : 1;
    208164
    209165    LayoutSize m_minimumSizeForResizing;
     
    234190};
    235191
    236 inline ElementRareData::ElementRareData(RenderElement* renderer)
    237     : NodeRareData(renderer)
    238     , m_tabIndex(0)
     192inline ElementRareData::ElementRareData()
     193    : m_tabIndex(0)
    239194    , m_childIndex(0)
    240195    , m_tabIndexWasSetExplicitly(false)
    241     , m_styleAffectedByActive(false)
    242     , m_styleAffectedByEmpty(false)
    243     , m_styleAffectedByFocusWithin(false)
    244196#if ENABLE(FULLSCREEN_API)
    245197    , m_containsFullScreenElement(false)
     
    248200    , m_hasCSSAnimation(false)
    249201    , m_hasElementIdentifier(false)
    250     , m_childrenAffectedByHover(false)
    251     , m_childrenAffectedByDrag(false)
    252     , m_childrenAffectedByLastChildRules(false)
    253     , m_childrenAffectedByForwardPositionalRules(false)
    254     , m_descendantsAffectedByForwardPositionalRules(false)
    255     , m_childrenAffectedByBackwardPositionalRules(false)
    256     , m_descendantsAffectedByBackwardPositionalRules(false)
    257     , m_childrenAffectedByPropertyBasedBackwardPositionalRules(false)
    258202    , m_minimumSizeForResizing(defaultMinimumSizeForResizing())
    259203{
     
    286230inline void ElementRareData::resetStyleRelations()
    287231{
    288     setStyleAffectedByEmpty(false);
    289     setStyleAffectedByFocusWithin(false);
    290232    setChildIndex(0);
    291     setStyleAffectedByActive(false);
    292     setChildrenAffectedByDrag(false);
    293     setChildrenAffectedByLastChildRules(false);
    294     setChildrenAffectedByForwardPositionalRules(false);
    295     setDescendantsAffectedByForwardPositionalRules(false);
    296     setChildrenAffectedByBackwardPositionalRules(false);
    297     setDescendantsAffectedByBackwardPositionalRules(false);
    298     setChildrenAffectedByPropertyBasedBackwardPositionalRules(false);
    299233}
    300234
  • trunk/Source/WebCore/dom/Node.cpp

    r248173 r248807  
    109109    case NodeRareData::UseType::TabIndex:
    110110        return "TabIndex";
    111     case NodeRareData::UseType::StyleFlags:
    112         return "StyleFlags";
    113111    case NodeRareData::UseType::MinimumSize:
    114112        return "MinimumSize";
     
    397395void Node::materializeRareData()
    398396{
    399     NodeRareData* data;
    400397    if (is<Element>(*this))
    401         data = std::make_unique<ElementRareData>(downcast<RenderElement>(m_data.m_renderer)).release();
     398        m_rareData = std::make_unique<ElementRareData>();
    402399    else
    403         data = std::make_unique<NodeRareData>(m_data.m_renderer).release();
    404     ASSERT(data);
    405 
    406     m_data.m_rareData = data;
    407     setFlag(HasRareDataFlag);
     400        m_rareData = std::make_unique<NodeRareData>();
    408401}
    409402
     
    413406    ASSERT(!transientMutationObserverRegistry() || transientMutationObserverRegistry()->isEmpty());
    414407
    415     RenderObject* renderer = m_data.m_rareData->renderer();
    416     if (isElementNode())
    417         delete static_cast<ElementRareData*>(m_data.m_rareData);
    418     else
    419         delete static_cast<NodeRareData*>(m_data.m_rareData);
    420     m_data.m_renderer = renderer;
    421     clearFlag(HasRareDataFlag);
     408    m_rareData = nullptr;
    422409}
    423410
  • trunk/Source/WebCore/dom/Node.h

    r247860 r248807  
    3232#include "StyleValidity.h"
    3333#include "TreeScope.h"
     34#include <wtf/CompactPointerTuple.h>
    3435#include <wtf/Forward.h>
    3536#include <wtf/IsoMalloc.h>
     
    6465
    6566using NodeOrString = Variant<RefPtr<Node>, String>;
    66 
    67 class NodeRareDataBase {
    68 public:
    69     RenderObject* renderer() const { return m_renderer; }
    70     void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
    71 
    72 protected:
    73     NodeRareDataBase(RenderObject* renderer)
    74         : m_renderer(renderer)
    75     { }
    76 
    77 private:
    78     RenderObject* m_renderer;
    79 };
    8067
    8168class Node : public EventTarget {
     
    411398
    412399    // As renderer() includes a branch you should avoid calling it repeatedly in hot code paths.
    413     RenderObject* renderer() const { return hasRareData() ? m_data.m_rareData->renderer() : m_data.m_renderer; };
    414     void setRenderer(RenderObject* renderer)
    415     {
    416         if (hasRareData())
    417             m_data.m_rareData->setRenderer(renderer);
    418         else
    419             m_data.m_renderer = renderer;
    420     }
     400    RenderObject* renderer() const { return m_rendererWithStyleFlags.pointer(); }
     401    void setRenderer(RenderObject*); // Defined in RenderObject.h
    421402
    422403    // Use these two methods with caution.
     
    529510#if ENABLE(JIT)
    530511    static ptrdiff_t nodeFlagsMemoryOffset() { return OBJECT_OFFSETOF(Node, m_nodeFlags); }
    531     static ptrdiff_t rareDataMemoryOffset() { return OBJECT_OFFSETOF(Node, m_data.m_rareData); }
     512    static ptrdiff_t rareDataMemoryOffset() { return OBJECT_OFFSETOF(Node, m_rareData); }
    532513    static int32_t flagIsText() { return IsTextFlag; }
    533514    static int32_t flagIsContainer() { return IsContainerFlag; }
     
    537518    static int32_t flagIsLink() { return IsLinkFlag; }
    538519    static int32_t flagHasFocusWithin() { return HasFocusWithin; }
    539     static int32_t flagHasRareData() { return HasRareDataFlag; }
    540520    static int32_t flagIsParsingChildrenFinished() { return IsParsingChildrenFinishedFlag; }
    541521    static int32_t flagChildrenAffectedByFirstChildRulesFlag() { return ChildrenAffectedByFirstChildRulesFlag; }
     
    558538        IsConnectedFlag = 1 << 8,
    559539        IsInShadowTreeFlag = 1 << 9,
    560         HasRareDataFlag = 1 << 10,
     540        StyleAffectedByFocusWithinFlag = 1 << 10,
    561541        HasEventTargetDataFlag = 1 << 11,
    562542
     
    621601    static constexpr uint32_t s_refCountMask = ~static_cast<uint32_t>(1);
    622602
     603    enum class ElementStyleFlag : uint8_t {
     604        StyleAffectedByActive = 1 << 0,
     605        StyleAffectedByEmpty = 1 << 1,
     606        ChildrenAffectedByDrag = 1 << 2,
     607
     608        // Bits for dynamic child matching.
     609        // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
     610        // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
     611        ChildrenAffectedByForwardPositionalRules = 1 << 3,
     612        DescendantsAffectedByForwardPositionalRules = 1 << 4,
     613        ChildrenAffectedByBackwardPositionalRules = 1 << 5,
     614        DescendantsAffectedByBackwardPositionalRules = 1 << 6,
     615        ChildrenAffectedByPropertyBasedBackwardPositionalRules = 1 << 7,
     616    };
     617
     618    bool hasStyleFlag(ElementStyleFlag state) const { return m_rendererWithStyleFlags.type() & static_cast<uint8_t>(state); }
     619    void setStyleFlag(ElementStyleFlag state) { m_rendererWithStyleFlags.setType(m_rendererWithStyleFlags.type() | static_cast<uint8_t>(state)); }
     620    void clearStyleFlags() { m_rendererWithStyleFlags.setType(0); }
     621
    623622    virtual void addSubresourceAttributeURLs(ListHashSet<URL>&) const { }
    624623
    625     bool hasRareData() const { return getFlag(HasRareDataFlag); }
    626 
    627     NodeRareData* rareData() const;
     624    bool hasRareData() const { return !!m_rareData; }
     625    NodeRareData* rareData() const { return m_rareData.get(); }
    628626    NodeRareData& ensureRareData();
    629627    void clearRareData();
     
    674672    Node* m_previous { nullptr };
    675673    Node* m_next { nullptr };
    676     // When a node has rare data we move the renderer into the rare data.
    677     union DataUnion {
    678         RenderObject* m_renderer;
    679         NodeRareDataBase* m_rareData;
    680     } m_data { nullptr };
     674    CompactPointerTuple<RenderObject*, uint8_t> m_rendererWithStyleFlags;
     675    std::unique_ptr<NodeRareData> m_rareData;
    681676};
    682677
  • trunk/Source/WebCore/dom/NodeRareData.cpp

    r243887 r248807  
    3838struct SameSizeAsNodeRareData {
    3939    unsigned m_bitfields : 20;
    40     void* m_pointer[3];
     40    void* m_pointer[2];
    4141};
    4242
  • trunk/Source/WebCore/dom/NodeRareData.h

    r248173 r248807  
    248248};
    249249
    250 class NodeRareData : public NodeRareDataBase {
     250class NodeRareData {
    251251    WTF_MAKE_NONCOPYABLE(NodeRareData); WTF_MAKE_FAST_ALLOCATED;
    252252public:
     
    258258
    259259        TabIndex = 1 << 3,
    260         StyleFlags = 1 << 4,
    261         MinimumSize = 1 << 5,
    262         ScrollingPosition = 1 << 6,
    263         ComputedStyle = 1 << 7,
    264         Dataset = 1 << 8,
    265         ClassList = 1 << 9,
    266         ShadowRoot = 1 << 10,
    267         CustomElementQueue = 1 << 11,
    268         AttributeMap = 1 << 12,
    269         InteractionObserver = 1 << 13,
    270         PseudoElements = 1 << 14,
     260        MinimumSize = 1 << 4,
     261        ScrollingPosition = 1 << 5,
     262        ComputedStyle = 1 << 6,
     263        Dataset = 1 << 7,
     264        ClassList = 1 << 8,
     265        ShadowRoot = 1 << 9,
     266        CustomElementQueue = 1 << 10,
     267        AttributeMap = 1 << 11,
     268        InteractionObserver = 1 << 12,
     269        PseudoElements = 1 << 13,
    271270    };
    272271#endif
    273272
    274     NodeRareData(RenderObject* renderer)
    275         : NodeRareDataBase(renderer)
    276         , m_connectedFrameCount(0)
     273    NodeRareData()
    277274    { }
    278275
     
    321318
    322319private:
    323     unsigned m_connectedFrameCount; // Must fit Page::maxNumberOfFrames.
     320    unsigned m_connectedFrameCount { 0 }; // Must fit Page::maxNumberOfFrames.
    324321
    325322    std::unique_ptr<NodeListsNodeData> m_nodeLists;
     
    337334}
    338335
    339 inline NodeRareData* Node::rareData() const
    340 {
    341     ASSERT_WITH_SECURITY_IMPLICATION(hasRareData());
    342     return static_cast<NodeRareData*>(m_data.m_rareData);
    343 }
    344 
    345336inline NodeRareData& Node::ensureRareData()
    346337{
  • trunk/Source/WebCore/rendering/RenderObject.h

    r246950 r248807  
    11041104}
    11051105
     1106inline void Node::setRenderer(RenderObject* renderer) { m_rendererWithStyleFlags.setPointer(renderer); }
     1107
    11061108#if ENABLE(TREE_DEBUGGING)
    11071109void printRenderTreeForLiveDocuments();
Note: See TracChangeset for help on using the changeset viewer.