Project: chromium Issues People Development process History Sign in
New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Starred by 2 users
Status: WontFix
Closed: Mar 2016
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Bug

issue 351146

Sign in to add a comment
Adding elements with ids is too expensive in ShadowRoot
Project Member Reported by, Mar 11 2014 Back to list
Google Chrome	35.0.1870.2 (Official Build 254650) dev
OS	Mac OS X 
Blink	537.36 (@168356)

Polymer apps like to have lots of ShadowRoots, and it's very common to have several ids in each of them since they sugar with this.$.idName in script. Unfortunately this is also causing them pain since a new id HashTable is allocated fresh (and empty) in each new component and then they pay resizing cost (and DocumentOrderedMap::add cost).

Running Time	Self		Symbol Name
757.0ms  100.0%	7.0	 	v8::Function::Call(v8::Handle<v8::Value>, int, v8::Handle<v8::Value>*)
749.0ms   98.9%	8.0	 	 v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, bool*, bool)
741.0ms   97.8%	44.0	 	  v8::internal::Invoke(bool, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, bool*)
264.0ms   34.8%	3.0	 	   WebCore::ElementV8Internal::createShadowRootMethodCallback(v8::FunctionCallbackInfo<v8::Value> const&)
169.0ms   22.3%	1.0	 	   WebCore::NodeV8Internal::appendChildMethodCallbackForMainWorld(v8::FunctionCallbackInfo<v8::Value> const&)
168.0ms   22.1%	4.0	 	    WebCore::V8Node::appendChildMethodCustom(v8::FunctionCallbackInfo<v8::Value> const&)
129.0ms   17.0%	2.0	 	     WebCore::Node::appendChild(WTF::PassRefPtr<WebCore::Node>, WebCore::ExceptionState&)
119.0ms   15.7%	1.0	 	      WebCore::ContainerNode::appendChild(WTF::PassRefPtr<WebCore::Node>, WebCore::ExceptionState&)
100.0ms   13.2%	0.0	 	       WebCore::ContainerNode::updateTreeAfterInsertion(WebCore::Node&)
87.0ms   11.4%	5.0	 	        WebCore::ChildNodeInsertionNotifier::notify(WebCore::Node&)
80.0ms   10.5%	4.0	 	         WebCore::Element::insertedInto(WebCore::ContainerNode*)
71.0ms    9.3%	2.0	 	          WebCore::Element::updateId(WebCore::TreeScope&, WTF::AtomicString const&, WTF::AtomicString const&)
69.0ms    9.1%	11.0	 	           WebCore::TreeScope::addElementById(WTF::AtomicString const&, WebCore::Element*)
36.0ms    4.7%	1.0	 	            WebCore::DocumentOrderedMap::add(WTF::StringImpl*, WebCore::Element*)
19.0ms    2.5%	18.0	 	            base::(anonymous namespace)::oom_killer_malloc(_malloc_zone_t*, unsigned long)
3.0ms    0.3%	2.0	 	            <Unknown Address>
5.0ms    0.6%	0.0	 	          <Unknown Address>
3.0ms    0.3%	3.0	 	           WebCore::TreeScope::addElementById(WTF::AtomicString const&, WebCore::Element*)
2.0ms    0.2%	2.0	 	           WebCore::Element::shouldRegisterAsExtraNamedItem() const

Benchmark courtesy of sorvell.
1.5 KB View Download
Blocking: chromium:351146
Components: Blink>WebComponents
Labels: -hotlist-toolkit hotlist-Toolkit
Status: Assigned
Comment 4 by, Mar 16 2016
Status: WontFix
I ran the test with and without ids, and could not see a significant difference. (and the results were unstable too)

With ids:
x-input: 1150.8150ms
x-input-style: 1847.6650ms
input: 539.8000ms

Without ids:
x-input: 1180.1100ms
x-input-style: 1741.2350ms
input: 535.5350ms

Maybe OILPAN helped this operation to speed up?
Sign in to add a comment