Title: [266714] trunk/Source/WebCore
Revision
266714
Author
[email protected]
Date
2020-09-07 21:30:14 -0700 (Mon, 07 Sep 2020)

Log Message

Move all remaining flags from ElementRareData to Node to reduce the frequency
https://bugs.webkit.org/show_bug.cgi?id=216208

Reviewed by Darin Adler.

This patch moves all remaining bit flags from ElementRareData to Node::m_nodeFlags. It also stores
tabIndex of 0 and -1 in Node::m_nodeFlags to avoid creating ElementRareData for these common values.

No new tests since there should be no behavioral change.

* dom/Element.cpp:
(WebCore::Element::clearTabIndexExplicitlyIfNeeded): Deleted. Merged into setTabIndexExplicitly.
(WebCore::Element::setTabIndexExplicitly): Now takes Optional<int>. Stores 0 and -1 as node flags.
(WebCore::Element::tabIndexSetExplicitly const): Added the special casing for 0 and -1.
(WebCore::Element::removedFromAncestor):
(WebCore::Element::containsFullScreenElement const): Deleted.
(WebCore::Element::setContainsFullScreenElement):
(WebCore::Element::hasPendingResources const): Deleted.
(WebCore::Element::setHasPendingResources): Deleted.
(WebCore::Element::clearHasPendingResources): Deleted.
(WebCore::Element::hasCSSAnimation const): Deleted.
(WebCore::Element::setHasCSSAnimation): Deleted.
(WebCore::Element::clearHasCSSAnimation): Deleted.
(WebCore::Element::createElementIdentifier):
* dom/Element.h:
(WebCore::Element::hasPendingResources const): Moved here from Element.cpp.
(WebCore::Element::setHasPendingResources): Ditto.
(WebCore::Element::clearHasPendingResources): Ditto.
(WebCore::Element::hasCSSAnimation const): Ditto.
(WebCore::Element::setHasCSSAnimation): Ditto.
(WebCore::Element::clearHasCSSAnimation): Ditto.
(WebCore::Element::containsFullScreenElement const): Ditto.
* dom/ElementRareData.cpp:
* dom/ElementRareData.h:
(WebCore::ElementRareData::tabIndex const): Deleted.
(WebCore::ElementRareData::setTabIndexExplicitly): Deleted.
(WebCore::ElementRareData::tabIndexSetExplicitly const): Deleted.
(WebCore::ElementRareData::clearTabIndexExplicitly): Deleted.
(WebCore::ElementRareData::containsFullScreenElement): Deleted.
(WebCore::ElementRareData::setContainsFullScreenElement): Deleted.
(WebCore::ElementRareData::hasPendingResources const): Deleted.
(WebCore::ElementRareData::setHasPendingResources): Deleted.
(WebCore::ElementRareData::hasCSSAnimation const): Deleted.
(WebCore::ElementRareData::setHasCSSAnimation): Deleted.
(WebCore::ElementRareData::hasElementIdentifier const): Deleted.
(WebCore::ElementRareData::setHasElementIdentifier): Deleted.
(WebCore::ElementRareData::useTypes const): Added the missing use types for style maps, part list,
and part names.
(WebCore::ElementRareData::ElementRareData):
(WebCore::ElementRareData::unusualTabIndex const): Renamed from tabIndex.
(WebCore::ElementRareData::setUnusualTabIndex): Ditto from setTabIndexExplicitly.
* dom/Node.cpp:
(WebCore::stringForRareDataUseType): Added the missing strings.
* dom/Node.h:
(WebCore::Node::NodeFlags): Moved bit flags from ElementRareData and reserved the two highest bits
to store TabIndexState.
(WebCore::Node::s_tabIndexStateBitOffset): Added.
(WebCore::Node::s_tabIndexStateBitMask): Added.
(WebCore::Node::TabIndexState): Added.
(WebCore::Node::tabIndexState const): Added.
(WebCore::Node::setTabIndexState): Added.
* dom/NodeRareData.h:
(WebCore::NodeRareData::UseType): Added the missing use types: style maps, part list, and part names.
* html/HTMLElement.cpp:
(WebCore::HTMLElement::parseAttribute):
* mathml/MathMLElement.cpp:
(WebCore::MathMLElement::parseAttribute):
* svg/SVGElement.cpp:
(WebCore::SVGElement::parseAttribute):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (266713 => 266714)


--- trunk/Source/WebCore/ChangeLog	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/ChangeLog	2020-09-08 04:30:14 UTC (rev 266714)
@@ -1,3 +1,75 @@
+2020-09-07  Ryosuke Niwa  <[email protected]>
+
+        Move all remaining flags from ElementRareData to Node to reduce the frequency
+        https://bugs.webkit.org/show_bug.cgi?id=216208
+
+        Reviewed by Darin Adler.
+
+        This patch moves all remaining bit flags from ElementRareData to Node::m_nodeFlags. It also stores
+        tabIndex of 0 and -1 in Node::m_nodeFlags to avoid creating ElementRareData for these common values.
+
+        No new tests since there should be no behavioral change.
+
+        * dom/Element.cpp:
+        (WebCore::Element::clearTabIndexExplicitlyIfNeeded): Deleted. Merged into setTabIndexExplicitly.
+        (WebCore::Element::setTabIndexExplicitly): Now takes Optional<int>. Stores 0 and -1 as node flags.
+        (WebCore::Element::tabIndexSetExplicitly const): Added the special casing for 0 and -1.
+        (WebCore::Element::removedFromAncestor):
+        (WebCore::Element::containsFullScreenElement const): Deleted.
+        (WebCore::Element::setContainsFullScreenElement):
+        (WebCore::Element::hasPendingResources const): Deleted.
+        (WebCore::Element::setHasPendingResources): Deleted.
+        (WebCore::Element::clearHasPendingResources): Deleted.
+        (WebCore::Element::hasCSSAnimation const): Deleted.
+        (WebCore::Element::setHasCSSAnimation): Deleted.
+        (WebCore::Element::clearHasCSSAnimation): Deleted.
+        (WebCore::Element::createElementIdentifier):
+        * dom/Element.h:
+        (WebCore::Element::hasPendingResources const): Moved here from Element.cpp.
+        (WebCore::Element::setHasPendingResources): Ditto.
+        (WebCore::Element::clearHasPendingResources): Ditto.
+        (WebCore::Element::hasCSSAnimation const): Ditto.
+        (WebCore::Element::setHasCSSAnimation): Ditto.
+        (WebCore::Element::clearHasCSSAnimation): Ditto.
+        (WebCore::Element::containsFullScreenElement const): Ditto.
+        * dom/ElementRareData.cpp:
+        * dom/ElementRareData.h:
+        (WebCore::ElementRareData::tabIndex const): Deleted.
+        (WebCore::ElementRareData::setTabIndexExplicitly): Deleted.
+        (WebCore::ElementRareData::tabIndexSetExplicitly const): Deleted.
+        (WebCore::ElementRareData::clearTabIndexExplicitly): Deleted.
+        (WebCore::ElementRareData::containsFullScreenElement): Deleted.
+        (WebCore::ElementRareData::setContainsFullScreenElement): Deleted.
+        (WebCore::ElementRareData::hasPendingResources const): Deleted.
+        (WebCore::ElementRareData::setHasPendingResources): Deleted.
+        (WebCore::ElementRareData::hasCSSAnimation const): Deleted.
+        (WebCore::ElementRareData::setHasCSSAnimation): Deleted.
+        (WebCore::ElementRareData::hasElementIdentifier const): Deleted.
+        (WebCore::ElementRareData::setHasElementIdentifier): Deleted.
+        (WebCore::ElementRareData::useTypes const): Added the missing use types for style maps, part list,
+        and part names.
+        (WebCore::ElementRareData::ElementRareData):
+        (WebCore::ElementRareData::unusualTabIndex const): Renamed from tabIndex.
+        (WebCore::ElementRareData::setUnusualTabIndex): Ditto from setTabIndexExplicitly.
+        * dom/Node.cpp:
+        (WebCore::stringForRareDataUseType): Added the missing strings.
+        * dom/Node.h:
+        (WebCore::Node::NodeFlags): Moved bit flags from ElementRareData and reserved the two highest bits
+        to store TabIndexState.
+        (WebCore::Node::s_tabIndexStateBitOffset): Added.
+        (WebCore::Node::s_tabIndexStateBitMask): Added.
+        (WebCore::Node::TabIndexState): Added.
+        (WebCore::Node::tabIndexState const): Added.
+        (WebCore::Node::setTabIndexState): Added.
+        * dom/NodeRareData.h:
+        (WebCore::NodeRareData::UseType): Added the missing use types: style maps, part list, and part names.
+        * html/HTMLElement.cpp:
+        (WebCore::HTMLElement::parseAttribute):
+        * mathml/MathMLElement.cpp:
+        (WebCore::MathMLElement::parseAttribute):
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::parseAttribute):
+
 2020-09-07  Chris Dumez  <[email protected]>
 
         AudioParam.cancelAndHoldAtTime() is missing

Modified: trunk/Source/WebCore/dom/Element.cpp (266713 => 266714)


--- trunk/Source/WebCore/dom/Element.cpp	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/Element.cpp	2020-09-08 04:30:14 UTC (rev 266714)
@@ -241,22 +241,40 @@
     return static_cast<ElementRareData&>(ensureRareData());
 }
 
-void Element::clearTabIndexExplicitlyIfNeeded()
+void Element::setTabIndexExplicitly(Optional<int> tabIndex)
 {
-    if (hasRareData())
-        elementRareData()->clearTabIndexExplicitly();
+    if (!tabIndex) {
+        setTabIndexState(TabIndexState::NotSet);
+        return;
+    }
+    setTabIndexState([this, value = tabIndex.value()]() {
+        switch (value) {
+        case 0:
+            return TabIndexState::Zero;
+        case -1:
+            return TabIndexState::NegativeOne;
+        default:
+            ensureElementRareData().setUnusualTabIndex(value);
+            return TabIndexState::InRareData;
+        }
+    }());
 }
 
-void Element::setTabIndexExplicitly(int tabIndex)
-{
-    ensureElementRareData().setTabIndexExplicitly(tabIndex);
-}
-
 Optional<int> Element::tabIndexSetExplicitly() const
 {
-    if (!hasRareData())
+    switch (tabIndexState()) {
+    case TabIndexState::NotSet:
         return WTF::nullopt;
-    return elementRareData()->tabIndex();
+    case TabIndexState::Zero:
+        return 0;
+    case TabIndexState::NegativeOne:
+        return -1;
+    case TabIndexState::InRareData:
+        ASSERT(hasRareData());
+        return elementRareData()->unusualTabIndex();
+    }
+    ASSERT_NOT_REACHED();
+    return WTF::nullopt;
 }
 
 int Element::defaultTabIndex() const
@@ -2266,9 +2284,9 @@
     }
 #endif
 
-    if (hasRareData() && elementRareData()->hasElementIdentifier()) {
+    if (getFlag(HasElementIdentifierFlag)) {
         document().identifiedElementWasRemovedFromDocument(*this);
-        elementRareData()->setHasElementIdentifier(false);
+        clearFlag(HasElementIdentifierFlag);
     }
 }
 
@@ -3716,14 +3734,12 @@
     document().fullscreenManager().requestFullscreenForElement(this, FullscreenManager::EnforceIFrameAllowFullscreenRequirement);
 }
 
-bool Element::containsFullScreenElement() const
-{
-    return hasRareData() && elementRareData()->containsFullScreenElement();
-}
-
 void Element::setContainsFullScreenElement(bool flag)
 {
-    ensureElementRareData().setContainsFullScreenElement(flag);
+    if (flag)
+        setFlag(ContainsFullScreenElementFlag);
+    else
+        clearFlag(ContainsFullScreenElementFlag);
     invalidateStyleAndLayerComposition();
 }
 
@@ -4366,40 +4382,6 @@
         m_elementData = downcast<ShareableElementData>(*m_elementData).makeUniqueCopy();
 }
 
-bool Element::hasPendingResources() const
-{
-    return hasRareData() && elementRareData()->hasPendingResources();
-}
-
-void Element::setHasPendingResources()
-{
-    ensureElementRareData().setHasPendingResources(true);
-}
-
-void Element::clearHasPendingResources()
-{
-    if (!hasRareData())
-        return;
-    elementRareData()->setHasPendingResources(false);
-}
-
-bool Element::hasCSSAnimation() const
-{
-    return hasRareData() && elementRareData()->hasCSSAnimation();
-}
-
-void Element::setHasCSSAnimation()
-{
-    ensureElementRareData().setHasCSSAnimation(true);
-}
-
-void Element::clearHasCSSAnimation()
-{
-    if (!hasRareData())
-        return;
-    elementRareData()->setHasCSSAnimation(false);
-}
-
 bool Element::canContainRangeEndPoint() const
 {
     return !equalLettersIgnoringASCIICase(attributeWithoutSynchronization(roleAttr), "img");
@@ -4611,10 +4593,8 @@
 
 ElementIdentifier Element::createElementIdentifier()
 {
-    auto& rareData = ensureElementRareData();
-    ASSERT(!rareData.hasElementIdentifier());
-
-    rareData.setHasElementIdentifier(true);
+    ASSERT(!getFlag(HasElementIdentifierFlag));
+    setFlag(HasElementIdentifierFlag);
     return ElementIdentifier::generate();
 }
 

Modified: trunk/Source/WebCore/dom/Element.h (266713 => 266714)


--- trunk/Source/WebCore/dom/Element.h	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/Element.h	2020-09-08 04:30:14 UTC (rev 266714)
@@ -35,6 +35,8 @@
 #include "WebAnimationTypes.h"
 #include <_javascript_Core/Strong.h>
 
+#define DUMP_NODE_STATISTICS 0
+
 namespace WebCore {
 
 class CustomElementReactionQueue;
@@ -479,14 +481,14 @@
 
     virtual bool childShouldCreateRenderer(const Node&) const;
 
-    bool hasPendingResources() const;
-    void setHasPendingResources();
-    void clearHasPendingResources();
+    bool hasPendingResources() const { return getFlag(HasPendingResourcesFlag); }
+    void setHasPendingResources() { setFlag(HasPendingResourcesFlag); }
+    void clearHasPendingResources() { clearFlag(HasPendingResourcesFlag); }
     virtual void buildPendingResource() { };
 
-    bool hasCSSAnimation() const;
-    void setHasCSSAnimation();
-    void clearHasCSSAnimation();
+    bool hasCSSAnimation() const { return getFlag(HasCSSAnimationFlag); }
+    void setHasCSSAnimation() { setFlag(HasCSSAnimationFlag); }
+    void clearHasCSSAnimation() { clearFlag(HasCSSAnimationFlag); }
 
     KeyframeEffectStack* keyframeEffectStack() const;
     KeyframeEffectStack& ensureKeyframeEffectStack();
@@ -511,7 +513,7 @@
     void setLastStyleChangeEventStyle(std::unique_ptr<const RenderStyle>&&);
 
 #if ENABLE(FULLSCREEN_API)
-    WEBCORE_EXPORT bool containsFullScreenElement() const;
+    bool containsFullScreenElement() const { return getFlag(ContainsFullScreenElementFlag); }
     void setContainsFullScreenElement(bool);
     void setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(bool);
     WEBCORE_EXPORT virtual void webkitRequestFullscreen();
@@ -635,8 +637,7 @@
     void removeAllEventListeners() final;
     virtual void parserDidSetAttributes();
 
-    void clearTabIndexExplicitlyIfNeeded();
-    void setTabIndexExplicitly(int);
+    void setTabIndexExplicitly(Optional<int>);
 
     void classAttributeChanged(const AtomString& newClassString);
     void partAttributeChanged(const AtomString& newValue);

Modified: trunk/Source/WebCore/dom/ElementRareData.cpp (266713 => 266714)


--- trunk/Source/WebCore/dom/ElementRareData.cpp	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/ElementRareData.cpp	2020-09-08 04:30:14 UTC (rev 266714)
@@ -36,11 +36,6 @@
 struct SameSizeAsElementRareData : NodeRareData {
     int tabIndex;
     unsigned short childIndex;
-#if ENABLE(FULLSCREEN_API)
-    unsigned bitfields : 12;
-#else
-    unsigned bitfields : 11;
-#endif
     LayoutSize sizeForResizing;
     IntPoint savedLayerScrollPosition;
     void* pointers[11];

Modified: trunk/Source/WebCore/dom/ElementRareData.h (266713 => 266714)


--- trunk/Source/WebCore/dom/ElementRareData.h	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2020-09-08 04:30:14 UTC (rev 266714)
@@ -56,16 +56,9 @@
 
     void resetComputedStyle();
     void resetStyleRelations();
-    
-    Optional<int> tabIndex() const { return m_tabIndexWasSetExplicitly ? Optional<int> { m_tabIndex } : WTF::nullopt; }
-    void setTabIndexExplicitly(int index) { m_tabIndex = index; m_tabIndexWasSetExplicitly = true; }
-    bool tabIndexSetExplicitly() const { return m_tabIndexWasSetExplicitly; }
-    void clearTabIndexExplicitly() { m_tabIndex = 0; m_tabIndexWasSetExplicitly = false; }
 
-#if ENABLE(FULLSCREEN_API)
-    bool containsFullScreenElement() { return m_containsFullScreenElement; }
-    void setContainsFullScreenElement(bool value) { m_containsFullScreenElement = value; }
-#endif
+    int unusualTabIndex() const;
+    void setUnusualTabIndex(int);
 
     unsigned childIndex() const { return m_childIndex; }
     void setChildIndex(unsigned index) { m_childIndex = index; }
@@ -96,18 +89,9 @@
     IntPoint savedLayerScrollPosition() const { return m_savedLayerScrollPosition; }
     void setSavedLayerScrollPosition(IntPoint position) { m_savedLayerScrollPosition = position; }
 
-    bool hasPendingResources() const { return m_hasPendingResources; }
-    void setHasPendingResources(bool has) { m_hasPendingResources = has; }
-
-    bool hasCSSAnimation() const { return m_hasCSSAnimation; }
-    void setHasCSSAnimation(bool value) { m_hasCSSAnimation = value; }
-
     ElementAnimationRareData* elementAnimationRareData() { return m_animationRareData.get(); }
     ElementAnimationRareData& ensureAnimationRareData();
 
-    bool hasElementIdentifier() const { return m_hasElementIdentifier; }
-    void setHasElementIdentifier(bool value) { m_hasElementIdentifier = value; }
-
     DOMTokenList* partList() const { return m_partList.get(); }
     void setPartList(std::unique_ptr<DOMTokenList> partList) { m_partList = WTFMove(partList); }
 
@@ -133,7 +117,7 @@
     OptionSet<UseType> useTypes() const
     {
         auto result = NodeRareData::useTypes();
-        if (m_tabIndexWasSetExplicitly)
+        if (m_unusualTabIndex)
             result.add(UseType::TabIndex);
         if (m_minimumSizeForResizing != defaultMinimumSizeForResizing())
             result.add(UseType::MinimumSize);
@@ -157,24 +141,25 @@
         if (m_resizeObserverData)
             result.add(UseType::ResizeObserver);
 #endif
+        if (m_animationRareData)
+            result.add(UseType::Animations);
         if (m_beforePseudoElement || m_afterPseudoElement)
             result.add(UseType::PseudoElements);
-        if (m_animationRareData)
-            result.add(UseType::Animations);
+#if ENABLE(CSS_TYPED_OM)
+        if (m_attributeStyleMap)
+            result.add(UseType::StyleMap);
+#endif
+        if (m_partList)
+            result.add(UseType::PartList);
+        if (!m_partNames.isEmpty())
+            result.add(UseType::PartNames);
         return result;
     }
 #endif
 
 private:
-    int m_tabIndex;
-    unsigned short m_childIndex;
-    unsigned m_tabIndexWasSetExplicitly : 1;
-#if ENABLE(FULLSCREEN_API)
-    unsigned m_containsFullScreenElement : 1;
-#endif
-    unsigned m_hasPendingResources : 1;
-    unsigned m_hasCSSAnimation : 1;
-    unsigned m_hasElementIdentifier : 1;
+    int m_unusualTabIndex { 0 };
+    unsigned short m_childIndex { 0 };
 
     LayoutSize m_minimumSizeForResizing;
     IntPoint m_savedLayerScrollPosition;
@@ -210,15 +195,6 @@
 
 inline ElementRareData::ElementRareData()
     : NodeRareData(Type::Element)
-    , m_tabIndex(0)
-    , m_childIndex(0)
-    , m_tabIndexWasSetExplicitly(false)
-#if ENABLE(FULLSCREEN_API)
-    , m_containsFullScreenElement(false)
-#endif
-    , m_hasPendingResources(false)
-    , m_hasCSSAnimation(false)
-    , m_hasElementIdentifier(false)
     , m_minimumSizeForResizing(defaultMinimumSizeForResizing())
 {
 }
@@ -252,6 +228,18 @@
     setChildIndex(0);
 }
 
+inline int ElementRareData::unusualTabIndex() const
+{
+    ASSERT(m_unusualTabIndex); // setUnusualTabIndex must have been called before this.
+    return m_unusualTabIndex;
+}
+
+inline void ElementRareData::setUnusualTabIndex(int tabIndex)
+{
+    ASSERT(tabIndex && tabIndex != -1); // Common values of 0 and -1 are stored as TabIndexState in Node.
+    m_unusualTabIndex = tabIndex;
+}
+
 inline ElementAnimationRareData& ElementRareData::ensureAnimationRareData()
 {
     if (!m_animationRareData)

Modified: trunk/Source/WebCore/dom/Node.cpp (266713 => 266714)


--- trunk/Source/WebCore/dom/Node.cpp	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/Node.cpp	2020-09-08 04:30:14 UTC (rev 266714)
@@ -130,10 +130,18 @@
         return "AttributeMap";
     case NodeRareData::UseType::InteractionObserver:
         return "InteractionObserver";
+    case NodeRareData::UseType::ResizeObserver:
+        return "ResizeObserver";
+    case NodeRareData::UseType::Animations:
+        return "Animations";
     case NodeRareData::UseType::PseudoElements:
         return "PseudoElements";
-    case NodeRareData::UseType::Animations:
-        return "Animations";
+    case NodeRareData::UseType::StyleMap:
+        return "StyleMap";
+    case NodeRareData::UseType::PartList:
+        return "PartList";
+    case NodeRareData::UseType::PartNames:
+        return "PartNames";
     }
     return nullptr;
 }

Modified: trunk/Source/WebCore/dom/Node.h (266713 => 266714)


--- trunk/Source/WebCore/dom/Node.h	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/Node.h	2020-09-08 04:30:14 UTC (rev 266714)
@@ -40,9 +40,6 @@
 #include <wtf/URLHash.h>
 #include <wtf/WeakPtr.h>
 
-// This needs to be here because Document.h also depends on it.
-#define DUMP_NODE_STATISTICS 0
-
 namespace WTF {
 class TextStream;
 }
@@ -543,16 +540,36 @@
 
         HasCustomStyleResolveCallbacksFlag = 1 << 22,
 
-        // Bits 23-31 are free.
+        HasPendingResourcesFlag = 1 << 23,
+        HasCSSAnimationFlag = 1 << 24,
+        HasElementIdentifierFlag = 1 << 25,
+#if ENABLE(FULLSCREEN_API)
+        ContainsFullScreenElementFlag = 1 << 26,
+#endif
 
+        // Bits 27-29 are free.
+        // Bits 30-31: TabIndexState
+
         DefaultNodeFlags = IsParsingChildrenFinishedFlag
     };
 
+    static constexpr unsigned s_tabIndexStateBitOffset = 30;
+    static constexpr uint32_t s_tabIndexStateBitMask = 3U << s_tabIndexStateBitOffset;
+    enum class TabIndexState : uint8_t {
+        NotSet = 0,
+        Zero = 1,
+        NegativeOne = 2,
+        InRareData = 3,
+    };
+
     bool getFlag(NodeFlags mask) const { return m_nodeFlags & mask; }
     void setFlag(bool f, NodeFlags mask) const { m_nodeFlags = (m_nodeFlags & ~mask) | (-(int32_t)f & mask); } 
     void setFlag(NodeFlags mask) const { m_nodeFlags |= mask; } 
     void clearFlag(NodeFlags mask) const { m_nodeFlags &= ~mask; }
 
+    TabIndexState tabIndexState() const { return static_cast<TabIndexState>((m_nodeFlags & s_tabIndexStateBitMask) >> s_tabIndexStateBitOffset); }
+    void setTabIndexState(TabIndexState state) { m_nodeFlags = (m_nodeFlags & ~s_tabIndexStateBitMask) | (static_cast<uint32_t>(state) << s_tabIndexStateBitOffset); }
+
     bool isParsingChildrenFinished() const { return getFlag(IsParsingChildrenFinishedFlag); }
     void setIsParsingChildrenFinished() { setFlag(IsParsingChildrenFinishedFlag); }
     void clearIsParsingChildrenFinished() { clearFlag(IsParsingChildrenFinishedFlag); }

Modified: trunk/Source/WebCore/dom/NodeRareData.h (266713 => 266714)


--- trunk/Source/WebCore/dom/NodeRareData.h	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/dom/NodeRareData.h	2020-09-08 04:30:14 UTC (rev 266714)
@@ -244,7 +244,7 @@
     WTF_MAKE_STRUCT_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(NodeRareData);
 public:
 #if defined(DUMP_NODE_STATISTICS) && DUMP_NODE_STATISTICS
-    enum class UseType : uint16_t {
+    enum class UseType : uint32_t {
         ConnectedFrameCount = 1 << 0,
         NodeList = 1 << 1,
         MutationObserver = 1 << 2,
@@ -258,8 +258,12 @@
         CustomElementQueue = 1 << 10,
         AttributeMap = 1 << 11,
         InteractionObserver = 1 << 12,
-        PseudoElements = 1 << 13,
+        ResizeObserver = 1 << 13,
         Animations = 1 << 14,
+        PseudoElements = 1 << 15,
+        StyleMap = 1 << 16,
+        PartList = 1 << 17,
+        PartNames = 1 << 18,
     };
 #endif
 

Modified: trunk/Source/WebCore/html/HTMLElement.cpp (266713 => 266714)


--- trunk/Source/WebCore/html/HTMLElement.cpp	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/html/HTMLElement.cpp	2020-09-08 04:30:14 UTC (rev 266714)
@@ -452,7 +452,7 @@
 
     if (name == tabindexAttr) {
         if (value.isEmpty())
-            clearTabIndexExplicitlyIfNeeded();
+            setTabIndexExplicitly(WTF::nullopt);
         else if (auto optionalTabIndex = parseHTMLInteger(value))
             setTabIndexExplicitly(optionalTabIndex.value());
         return;

Modified: trunk/Source/WebCore/mathml/MathMLElement.cpp (266713 => 266714)


--- trunk/Source/WebCore/mathml/MathMLElement.cpp	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/mathml/MathMLElement.cpp	2020-09-08 04:30:14 UTC (rev 266714)
@@ -92,7 +92,7 @@
             downcast<RenderTableCell>(renderer())->colSpanOrRowSpanChanged();
     } else if (name == HTMLNames::tabindexAttr) {
         if (value.isEmpty())
-            clearTabIndexExplicitlyIfNeeded();
+            setTabIndexExplicitly(WTF::nullopt);
         else if (auto optionalTabIndex = parseHTMLInteger(value))
             setTabIndexExplicitly(optionalTabIndex.value());
     } else {

Modified: trunk/Source/WebCore/svg/SVGElement.cpp (266713 => 266714)


--- trunk/Source/WebCore/svg/SVGElement.cpp	2020-09-08 03:50:14 UTC (rev 266713)
+++ trunk/Source/WebCore/svg/SVGElement.cpp	2020-09-08 04:30:14 UTC (rev 266714)
@@ -339,7 +339,7 @@
 
     if (name == HTMLNames::tabindexAttr) {
         if (value.isEmpty())
-            clearTabIndexExplicitlyIfNeeded();
+            setTabIndexExplicitly(WTF::nullopt);
         else if (auto optionalTabIndex = parseHTMLInteger(value))
             setTabIndexExplicitly(optionalTabIndex.value());
         return;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to