Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Unified Diff: Source/core/dom/Element.cpp

Issue 328243005: Remove attrNodeListMap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Don't increase the size of ElementRareData Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/Element.cpp
diff --git a/Source/core/dom/Element.cpp b/Source/core/dom/Element.cpp
index 74d3965142bd8e6dea27cf522c36500443f7d29d..8fd56ce25e2aee01197a80d59522d360f170af5c 100644
--- a/Source/core/dom/Element.cpp
+++ b/Source/core/dom/Element.cpp
@@ -114,41 +114,6 @@ using namespace HTMLNames;
using namespace XMLNames;
typedef WillBeHeapVector<RefPtrWillBeMember<Attr> > AttrNodeList;
-typedef WillBePersistentHeapHashMap<RawPtrWillBeWeakMember<Element>, OwnPtrWillBeMember<AttrNodeList> > AttrNodeListMap;
-
-static AttrNodeListMap& attrNodeListMap()
-{
- DEFINE_STATIC_LOCAL(AttrNodeListMap, map, ());
- return map;
-}
-
-static AttrNodeList* attrNodeListForElement(Element* element)
-{
- if (!element->hasSyntheticAttrChildNodes())
- return 0;
- ASSERT(attrNodeListMap().contains(element));
- return attrNodeListMap().get(element);
-}
-
-static AttrNodeList& ensureAttrNodeListForElement(Element* element)
-{
- if (element->hasSyntheticAttrChildNodes()) {
- ASSERT(attrNodeListMap().contains(element));
- return *attrNodeListMap().get(element);
- }
- ASSERT(!attrNodeListMap().contains(element));
- element->setHasSyntheticAttrChildNodes(true);
- AttrNodeListMap::AddResult result = attrNodeListMap().add(element, adoptPtrWillBeNoop(new AttrNodeList));
- return *result.storedValue->value;
-}
-
-static void removeAttrNodeListForElement(Element* element)
-{
- ASSERT(element->hasSyntheticAttrChildNodes());
- ASSERT(attrNodeListMap().contains(element));
- attrNodeListMap().remove(element);
- element->setHasSyntheticAttrChildNodes(false);
-}
static Attr* findAttrNodeInList(const AttrNodeList& attrNodeList, const QualifiedName& name)
{
@@ -354,12 +319,12 @@ void Element::setBooleanAttribute(const QualifiedName& name, bool value)
NamedNodeMap* Element::attributes() const
{
- ElementRareData& rareData = const_cast<Element*>(this)->ensureElementRareData();
- if (NamedNodeMap* attributeMap = rareData.attributeMap())
+ AttrData& attrData = const_cast<Element*>(this)->ensureElementRareData().ensureAttrData();
+ if (NamedNodeMap* attributeMap = attrData.attributeMap())
return attributeMap;
- rareData.setAttributeMap(NamedNodeMap::create(const_cast<Element*>(this)));
- return rareData.attributeMap();
+ attrData.setAttributeMap(NamedNodeMap::create(const_cast<Element*>(this)));
+ return attrData.attributeMap();
}
ActiveAnimations* Element::activeAnimations() const
@@ -1865,10 +1830,23 @@ void Element::formatForDebugger(char* buffer, unsigned length) const
}
#endif
-const WillBeHeapVector<RefPtrWillBeMember<Attr> >& Element::attrNodeList()
+WillBeHeapVector<RefPtrWillBeMember<Attr> >* Element::attrNodeList()
+{
+ return hasRareData() && elementRareData()->attrData() ? elementRareData()->attrData()->attrNodeList() : 0;
esprehn 2014/06/17 08:27:05 This would be better as: if (!hasRareData()) re
+}
+
+WillBeHeapVector<RefPtrWillBeMember<Attr> >& Element::ensureAttrNodeList()
+{
+ setHasSyntheticAttrChildNodes(true);
esprehn 2014/06/17 08:27:05 You can remove this bitfield now. hasSyntheticAttr
+ return ensureElementRareData().ensureAttrData().ensureAttrNodeList();
+}
+
+void Element::removeAttrNodeList()
{
ASSERT(hasSyntheticAttrChildNodes());
- return *attrNodeListForElement(this);
+ if (hasRareData() && elementRareData()->attrData())
+ elementRareData()->attrData()->removeAttrNodeList();
+ setHasSyntheticAttrChildNodes(false);
}
PassRefPtrWillBeRawPtr<Attr> Element::setAttributeNode(Attr* attrNode, ExceptionState& exceptionState)
@@ -1919,7 +1897,7 @@ PassRefPtrWillBeRawPtr<Attr> Element::setAttributeNode(Attr* attrNode, Exception
attrNode->attachToElement(this, localName);
treeScope().adoptIfNeeded(*attrNode);
- ensureAttrNodeListForElement(this).append(attrNode);
+ ensureAttrNodeList().append(attrNode);
return oldAttrNode.release();
}
@@ -2770,7 +2748,7 @@ bool Element::fastAttributeLookupAllowed(const QualifiedName& name) const
#ifdef DUMP_NODE_STATISTICS
bool Element::hasNamedNodeMap() const
{
- return hasRareData() && elementRareData()->attributeMap();
+ return hasRareData() && elementRareData()->attrData() && elementRareData()->attrData()->attributeMap();
esprehn 2014/06/17 08:27:05 ditto
}
#endif
@@ -2985,14 +2963,14 @@ void Element::setSavedLayerScrollOffset(const IntSize& size)
PassRefPtrWillBeRawPtr<Attr> Element::attrIfExists(const QualifiedName& name)
{
- if (AttrNodeList* attrNodeList = attrNodeListForElement(this))
+ if (AttrNodeList* attrNodeList = this->attrNodeList())
haraken 2014/06/17 02:07:02 Rename the |attrNodeList| variable to something el
esprehn 2014/06/17 08:27:05 list = ...
return findAttrNodeInList(*attrNodeList, name);
return nullptr;
}
PassRefPtrWillBeRawPtr<Attr> Element::ensureAttr(const QualifiedName& name)
{
- AttrNodeList& attrNodeList = ensureAttrNodeListForElement(this);
+ AttrNodeList& attrNodeList = ensureAttrNodeList();
RefPtrWillBeRawPtr<Attr> attrNode = findAttrNodeInList(attrNodeList, name);
if (!attrNode) {
attrNode = Attr::create(*this, name);
@@ -3007,12 +2985,12 @@ void Element::detachAttrNodeFromElementWithValue(Attr* attrNode, const AtomicStr
ASSERT(hasSyntheticAttrChildNodes());
attrNode->detachFromElementWithValue(value);
- AttrNodeList* attrNodeList = attrNodeListForElement(this);
+ AttrNodeList* attrNodeList = this->attrNodeList();
for (unsigned i = 0; i < attrNodeList->size(); ++i) {
if (attrNodeList->at(i)->qualifiedName() == attrNode->qualifiedName()) {
attrNodeList->remove(i);
if (attrNodeList->isEmpty())
- removeAttrNodeListForElement(this);
+ removeAttrNodeList();
return;
}
}
@@ -3021,7 +2999,7 @@ void Element::detachAttrNodeFromElementWithValue(Attr* attrNode, const AtomicStr
void Element::detachAllAttrNodesFromElement()
{
- AttrNodeList* attrNodeList = attrNodeListForElement(this);
+ AttrNodeList* attrNodeList = this->attrNodeList();
ASSERT(attrNodeList);
AttributeIteratorAccessor attributes = attributesIterator();
@@ -3031,7 +3009,7 @@ void Element::detachAllAttrNodesFromElement()
attrNode->detachFromElementWithValue(it->value());
}
- removeAttrNodeListForElement(this);
+ removeAttrNodeList();
}
void Element::willRecalcStyle(StyleRecalcChange)

Powered by Google App Engine
This is Rietveld 408576698