diff options
author | Kulanthaivel Palanichamy <kulanthaivel@codeaurora.org> | 2012-08-15 17:14:48 -0700 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2013-01-20 18:38:34 -0800 |
commit | 91437969ddb28bc81b3652986a67aae7e2465db2 (patch) | |
tree | 4d09df4e02a483e573700d8bfacb6fec8b658a7c /Source/WebCore/dom/Node.cpp | |
parent | 0f5d4355d7a384679722338d55f65bbb92350cfc (diff) | |
download | external_webkit-91437969ddb28bc81b3652986a67aae7e2465db2.zip external_webkit-91437969ddb28bc81b3652986a67aae7e2465db2.tar.gz external_webkit-91437969ddb28bc81b3652986a67aae7e2465db2.tar.bz2 |
[WebKit] Browsermark DomAdvSearch and DomSearch optimizations
This patch is a combination of the following optimizations.
Optimize appendCharactersReplacingEntities
[Performance] Optimize innerHTML and outerHTML
https://bugs.webkit.org/show_bug.cgi?id=81214
Optimize Dromaeo/dom-query.html by caching NodeRareData on Document
https://bugs.webkit.org/show_bug.cgi?id=90059
Optimize Dromaeo/dom-attr.html by speeding up Element::getAttribute()
https://bugs.webkit.org/show_bug.cgi?id=90174
Change argument types of Element::getAttribute*() from String to AtomicString
https://bugs.webkit.org/show_bug.cgi?id=90246
Conflicts:
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Document.h
Conflicts:
Source/WebCore/ChangeLog
Change-Id: I9ca3d2e883155e2ad08c3cb0c5912b935ebe9406
Diffstat (limited to 'Source/WebCore/dom/Node.cpp')
-rw-r--r-- | Source/WebCore/dom/Node.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Source/WebCore/dom/Node.cpp b/Source/WebCore/dom/Node.cpp index 1e56278..5b173bf 100644 --- a/Source/WebCore/dom/Node.cpp +++ b/Source/WebCore/dom/Node.cpp @@ -394,7 +394,7 @@ Node::~Node() else { if (m_document && rareData()->nodeLists()) m_document->removeNodeListCache(); - + NodeRareData::NodeRareDataMap& dataMap = NodeRareData::rareDataMap(); NodeRareData::NodeRareDataMap::iterator it = dataMap.find(this); ASSERT(it != dataMap.end()); @@ -534,7 +534,9 @@ void Node::setTreeScopeRecursively(TreeScope* newTreeScope) NodeRareData* Node::rareData() const { ASSERT(hasRareData()); - return NodeRareData::rareDataFromMap(this); + NodeRareData* data = isDocumentNode() ? static_cast<const Document*>(this)->documentRareData() : NodeRareData::rareDataFromMap(this); + ASSERT(data); + return data; } NodeRareData* Node::ensureRareData() @@ -542,9 +544,15 @@ NodeRareData* Node::ensureRareData() if (hasRareData()) return rareData(); - ASSERT(!NodeRareData::rareDataMap().contains(this)); NodeRareData* data = createRareData(); - NodeRareData::rareDataMap().set(this, data); + if (isDocumentNode()) { + // Fast path for a Document. A Document knows a pointer to NodeRareData. + ASSERT(!static_cast<Document*>(this)->documentRareData()); + static_cast<Document*>(this)->setDocumentRareData(data); + } else { + ASSERT(!NodeRareData::rareDataMap().contains(this)); + NodeRareData::rareDataMap().set(this, data); + } setFlag(HasRareDataFlag); return data; } |