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

Unified Diff: third_party/WebKit/Source/core/dom/custom/CustomElementRegistry.cpp

Issue 2828643002: Make customElements.define faster
Patch Set: Remove some unneeded casts. Created 3 years, 8 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/dom/custom/CustomElementRegistry.cpp
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementRegistry.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementRegistry.cpp
index c0dfb779f5b33c265733a982b97586a9c18ba8d5..88a27e00182868600089dbaf942591a69deb23c8 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementRegistry.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementRegistry.cpp
@@ -4,6 +4,7 @@
#include "core/dom/custom/CustomElementRegistry.h"
+#include <limits>
#include "bindings/core/v8/ExceptionState.h"
#include "bindings/core/v8/ScriptCustomElementDefinitionBuilder.h"
#include "bindings/core/v8/ScriptPromise.h"
@@ -93,6 +94,8 @@ DEFINE_TRACE(CustomElementRegistry) {
DEFINE_TRACE_WRAPPERS(CustomElementRegistry) {
visitor->TraceWrappers(&CustomElementReactionStack::Current());
+ for (auto definition : definitions_)
+ visitor->TraceWrappers(definition);
}
CustomElementDefinition* CustomElementRegistry::define(
@@ -183,11 +186,15 @@ CustomElementDefinition* CustomElementRegistry::define(
}
CustomElementDescriptor descriptor(name, local_name);
- CustomElementDefinition* definition = builder.Build(descriptor);
+ if (UNLIKELY(definitions_.size() >= std::numeric_limits<uint32_t>::max()))
+ return nullptr;
+ uint32_t id = definitions_.size() + 1;
+ CustomElementDefinition* definition = builder.Build(descriptor, id);
CHECK(!exception_state.HadException());
CHECK(definition->Descriptor() == descriptor);
- DefinitionMap::AddResult result =
- definitions_.insert(descriptor.GetName(), definition);
+ definitions_.emplace_back(
+ TraceWrapperMember<CustomElementDefinition>(this, definition));
+ DefinitionMap::AddResult result = nameIdMap_.insert(descriptor.GetName(), id);
CHECK(result.is_new_entry);
HeapVector<Member<Element>> candidates;
@@ -234,7 +241,7 @@ CustomElementDefinition* CustomElementRegistry::DefinitionFor(
}
bool CustomElementRegistry::NameIsDefined(const AtomicString& name) const {
- return definitions_.Contains(name);
+ return nameIdMap_.Contains(name);
}
void CustomElementRegistry::Entangle(V0CustomElementRegistrationContext* v0) {
@@ -252,7 +259,12 @@ bool CustomElementRegistry::V0NameIsDefined(const AtomicString& name) {
CustomElementDefinition* CustomElementRegistry::DefinitionForName(
const AtomicString& name) const {
- return definitions_.at(name);
+ return DefinitionForId(nameIdMap_.at(name));
+}
+
+CustomElementDefinition* CustomElementRegistry::DefinitionForId(
+ CustomElementDefinition::Id id) const {
kochi 2017/04/28 06:24:15 Add DCHECK(id <= difinitions_.size())?
+ return id ? definitions_[id - 1].Get() : nullptr;
}
void CustomElementRegistry::AddCandidate(Element* candidate) {

Powered by Google App Engine
This is Rietveld 408576698