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

Side by Side 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2015 Google Inc. All rights reserved. 2 * Copyright (C) 2015 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 return m_distributedNodes; 76 return m_distributedNodes;
77 } 77 }
78 78
79 void HTMLSlotElement::appendAssignedNode(Node& node) 79 void HTMLSlotElement::appendAssignedNode(Node& node)
80 { 80 {
81 m_assignedNodes.append(&node); 81 m_assignedNodes.append(&node);
82 } 82 }
83 83
84 void HTMLSlotElement::appendDistributedNode(Node& node) 84 void HTMLSlotElement::appendDistributedNode(Node& node)
85 { 85 {
86 size_t size = m_distributedNodes.size();
86 m_distributedNodes.append(&node); 87 m_distributedNodes.append(&node);
88 m_distributedIndices.set(&node, size);
87 } 89 }
88 90
89 void HTMLSlotElement::appendDistributedNodesFrom(const HTMLSlotElement& other) 91 void HTMLSlotElement::appendDistributedNodesFrom(const HTMLSlotElement& other)
90 { 92 {
93 size_t index = m_distributedNodes.size();
91 m_distributedNodes.appendVector(other.m_distributedNodes); 94 m_distributedNodes.appendVector(other.m_distributedNodes);
95 for (WillBeHeapHashMap<RawPtrWillBeMember<const Node>, size_t>::const_iterat or 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.
96 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.
97 m_distributedIndices.set(node, index);
98 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.
99 }
92 } 100 }
93 101
94 void HTMLSlotElement::clearDistribution() 102 void HTMLSlotElement::clearDistribution()
95 { 103 {
96 m_assignedNodes.clear(); 104 m_assignedNodes.clear();
97 m_distributedNodes.clear(); 105 m_distributedNodes.clear();
106 m_distributedIndices.clear();
98 } 107 }
99 108
100 Node* HTMLSlotElement::distributedNodeNextTo(const Node& node) const 109 Node* HTMLSlotElement::distributedNodeNextTo(const Node& node) const
101 { 110 {
102 size_t index = m_distributedNodes.find(&node); 111 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.
103 if (index == kNotFound || index + 1 == m_distributedNodes.size()) 112 if (it == m_distributedIndices.end())
113 return nullptr;
114 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.
115 if (index + 1 == m_distributedNodes.size())
104 return nullptr; 116 return nullptr;
105 return m_distributedNodes[index + 1].get(); 117 return m_distributedNodes[index + 1].get();
106 } 118 }
107 119
108 Node* HTMLSlotElement::distributedNodePreviousTo(const Node& node) const 120 Node* HTMLSlotElement::distributedNodePreviousTo(const Node& node) const
109 { 121 {
110 size_t index = m_distributedNodes.find(&node); 122 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.
111 if (index == kNotFound || index == 0) 123 if (it == m_distributedIndices.end())
124 return nullptr;
125 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.
126 if (index == 0)
112 return nullptr; 127 return nullptr;
113 return m_distributedNodes[index - 1].get(); 128 return m_distributedNodes[index - 1].get();
114 } 129 }
115 130
116 void HTMLSlotElement::attach(const AttachContext& context) 131 void HTMLSlotElement::attach(const AttachContext& context)
117 { 132 {
118 for (auto& node : m_distributedNodes) { 133 for (auto& node : m_distributedNodes) {
119 if (node->needsAttach()) 134 if (node->needsAttach())
120 node->attach(context); 135 node->attach(context);
121 } 136 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 continue; 210 continue;
196 if (isHTMLSlotElement(child)) 211 if (isHTMLSlotElement(child))
197 appendDistributedNodesFrom(toHTMLSlotElement(child)); 212 appendDistributedNodesFrom(toHTMLSlotElement(child));
198 else 213 else
199 appendDistributedNode(child); 214 appendDistributedNode(child);
200 } 215 }
201 } 216 }
202 217
203 DEFINE_TRACE(HTMLSlotElement) 218 DEFINE_TRACE(HTMLSlotElement)
204 { 219 {
220 #if ENABLE(OILPAN)
205 visitor->trace(m_assignedNodes); 221 visitor->trace(m_assignedNodes);
206 visitor->trace(m_distributedNodes); 222 visitor->trace(m_distributedNodes);
223 visitor->trace(m_distributedIndices);
224 #endif
207 HTMLElement::trace(visitor); 225 HTMLElement::trace(visitor);
208 } 226 }
209 227
210 } 228 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698