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

Unified Diff: third_party/WebKit/Source/core/html/HTMLSlotElement.cpp

Issue 1611413005: Make HTMLSlotElement.distributedNodeNextTo&distributedNodePreviousTo faster (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add Performance Test Created 4 years, 11 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: third_party/WebKit/Source/core/html/HTMLSlotElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp b/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp
index 230144be09fef59eae872e1986c2f5ecaaa7d010..897a2716098d07b85bdcb4fa7bb73b066b8da202 100644
--- a/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp
@@ -83,32 +83,47 @@ void HTMLSlotElement::appendAssignedNode(Node& node)
void HTMLSlotElement::appendDistributedNode(Node& node)
{
+ size_t size = m_distributedNodes.size();
m_distributedNodes.append(&node);
+ m_distributedIndices.set(&node, size);
}
void HTMLSlotElement::appendDistributedNodesFrom(const HTMLSlotElement& other)
{
+ size_t index = m_distributedNodes.size();
m_distributedNodes.appendVector(other.m_distributedNodes);
+ for (WillBeHeapHashMap<RawPtrWillBeMember<const Node>, size_t>::const_iterator it = other.m_distributedIndices.begin(); it != other.m_distributedIndices.end(); ++it) {
kochi 2016/01/27 08:29:13 You can write "for (const auto& it = other.m_distr
yuzuchan 2016/02/01 05:40:42 Done.
+ const Node* node = it.get()->key;
kochi 2016/01/27 08:29:13 You can write "it->key".
yuzuchan 2016/02/01 05:40:42 Done.
+ m_distributedIndices.set(node, index);
+ index++;
kochi 2016/01/27 08:29:13 You can write line97 as m_distributedIndices.set(n
yuzuchan 2016/02/01 05:40:42 Done.
+ }
}
void HTMLSlotElement::clearDistribution()
{
m_assignedNodes.clear();
m_distributedNodes.clear();
+ m_distributedIndices.clear();
}
Node* HTMLSlotElement::distributedNodeNextTo(const Node& node) const
{
- size_t index = m_distributedNodes.find(&node);
- if (index == kNotFound || index + 1 == m_distributedNodes.size())
+ WillBeHeapHashMap<RawPtrWillBeMember<const Node>, size_t>::const_iterator it = m_distributedIndices.find(&node);
kochi 2016/01/27 08:29:13 You can write "const auto it = ...".
yuzuchan 2016/02/01 05:40:42 Done.
+ if (it == m_distributedIndices.end())
+ return nullptr;
+ size_t index = it.get()->value;
kochi 2016/01/27 08:29:13 You can write "it->value".
yuzuchan 2016/02/01 05:40:42 Done.
+ if (index + 1 == m_distributedNodes.size())
return nullptr;
return m_distributedNodes[index + 1].get();
}
Node* HTMLSlotElement::distributedNodePreviousTo(const Node& node) const
{
- size_t index = m_distributedNodes.find(&node);
- if (index == kNotFound || index == 0)
+ WillBeHeapHashMap<RawPtrWillBeMember<const Node>, size_t>::const_iterator it = m_distributedIndices.find(&node);
kochi 2016/01/27 08:29:13 You can write "const auto it = ...".
yuzuchan 2016/02/01 05:40:42 Done.
+ if (it == m_distributedIndices.end())
+ return nullptr;
+ size_t index = it.get()->value;
kochi 2016/01/27 08:29:13 You can write "it->value".
yuzuchan 2016/02/01 05:40:42 Done.
+ if (index == 0)
return nullptr;
return m_distributedNodes[index - 1].get();
}
@@ -202,8 +217,11 @@ void HTMLSlotElement::updateDistributedNodesWithFallback()
DEFINE_TRACE(HTMLSlotElement)
{
+#if ENABLE(OILPAN)
visitor->trace(m_assignedNodes);
visitor->trace(m_distributedNodes);
+ visitor->trace(m_distributedIndices);
+#endif
HTMLElement::trace(visitor);
}

Powered by Google App Engine
This is Rietveld 408576698