From 3c70b297c7be12b7d7e120de04a38f40b600928b Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 25 Jan 2020 09:14:03 -0500 Subject: Bug 1430951 - Avoid element name atomizing to improve performance of LookupCustomElementDefinition Since we are dealing with the element (nodeInfo->LocalName() and NameAtom() are the same value), we could use nodeInfo->NameAtom() instead. Tag UXP Issue #1344 --- dom/base/CustomElementRegistry.cpp | 5 ++--- dom/base/CustomElementRegistry.h | 2 +- dom/base/nsContentUtils.cpp | 8 +++++--- dom/base/nsContentUtils.h | 2 +- dom/base/nsNodeUtils.cpp | 4 +++- dom/html/nsHTMLContentSink.cpp | 3 ++- parser/html/nsHtml5TreeOperation.cpp | 3 ++- 7 files changed, 16 insertions(+), 11 deletions(-) diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index 47601aabb..99452df65 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -243,12 +243,11 @@ CustomElementRegistry::~CustomElementRegistry() } CustomElementDefinition* -CustomElementRegistry::LookupCustomElementDefinition(const nsAString& aLocalName, +CustomElementRegistry::LookupCustomElementDefinition(nsIAtom* aNameAtom, nsIAtom* aTypeAtom) const { - nsCOMPtr localNameAtom = NS_Atomize(aLocalName); CustomElementDefinition* data = mCustomDefinitions.GetWeak(aTypeAtom); - if (data && data->mLocalName == localNameAtom) { + if (data && data->mLocalName == aNameAtom) { return data; } diff --git a/dom/base/CustomElementRegistry.h b/dom/base/CustomElementRegistry.h index 01c32a595..c416e5043 100644 --- a/dom/base/CustomElementRegistry.h +++ b/dom/base/CustomElementRegistry.h @@ -412,7 +412,7 @@ public: * https://html.spec.whatwg.org/#look-up-a-custom-element-definition */ CustomElementDefinition* LookupCustomElementDefinition( - const nsAString& aLocalName, nsIAtom* aTypeAtom) const; + nsIAtom* aNameAtom, nsIAtom* aTypeAtom) const; CustomElementDefinition* LookupCustomElementDefinition( JSContext* aCx, JSObject *aConstructor) const; diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 402dfd1c5..b6cbbbace 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -9536,9 +9536,11 @@ nsContentUtils::TryToUpgradeElement(Element* aElement) NodeInfo* nodeInfo = aElement->NodeInfo(); RefPtr typeAtom = aElement->GetCustomElementData()->GetCustomElementType(); + + MOZ_ASSERT(nodeInfo->NameAtom()->Equals(nodeInfo->LocalName())); CustomElementDefinition* definition = nsContentUtils::LookupCustomElementDefinition(nodeInfo->GetDocument(), - nodeInfo->LocalName(), + nodeInfo->NameAtom(), nodeInfo->NamespaceID(), typeAtom); if (definition) { @@ -9553,7 +9555,7 @@ nsContentUtils::TryToUpgradeElement(Element* aElement) /* static */ CustomElementDefinition* nsContentUtils::LookupCustomElementDefinition(nsIDocument* aDoc, - const nsAString& aLocalName, + nsIAtom* aNameAtom, uint32_t aNameSpaceID, nsIAtom* aTypeAtom) { @@ -9577,7 +9579,7 @@ nsContentUtils::LookupCustomElementDefinition(nsIDocument* aDoc, return nullptr; } - return registry->LookupCustomElementDefinition(aLocalName, aTypeAtom); + return registry->LookupCustomElementDefinition(aNameAtom, aTypeAtom); } /* static */ void diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h index 4200a0621..bf6a59dcd 100644 --- a/dom/base/nsContentUtils.h +++ b/dom/base/nsContentUtils.h @@ -2712,7 +2712,7 @@ public: */ static mozilla::dom::CustomElementDefinition* LookupCustomElementDefinition(nsIDocument* aDoc, - const nsAString& aLocalName, + nsIAtom* aNameAtom, uint32_t aNameSpaceID, nsIAtom* aTypeAtom); diff --git a/dom/base/nsNodeUtils.cpp b/dom/base/nsNodeUtils.cpp index f79da6652..384e56cde 100644 --- a/dom/base/nsNodeUtils.cpp +++ b/dom/base/nsNodeUtils.cpp @@ -497,9 +497,11 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, if (data || !extension.IsEmpty()) { RefPtr typeAtom = extension.IsEmpty() ? tagAtom : NS_Atomize(extension); cloneElem->SetCustomElementData(new CustomElementData(typeAtom)); + + MOZ_ASSERT(nodeInfo->NameAtom()->Equals(nodeInfo->LocalName())); CustomElementDefinition* definition = nsContentUtils::LookupCustomElementDefinition(nodeInfo->GetDocument(), - nodeInfo->LocalName(), + nodeInfo->NameAtom(), nodeInfo->NamespaceID(), typeAtom); if (definition) { diff --git a/dom/html/nsHTMLContentSink.cpp b/dom/html/nsHTMLContentSink.cpp index 920ded728..1fe5d2a86 100644 --- a/dom/html/nsHTMLContentSink.cpp +++ b/dom/html/nsHTMLContentSink.cpp @@ -287,9 +287,10 @@ NS_NewHTMLElement(Element** aResult, already_AddRefed&& CustomElementDefinition* definition = aDefinition; if (CustomElementRegistry::IsCustomElementEnabled() && isCustomElement && !definition) { + MOZ_ASSERT(nodeInfo->NameAtom()->Equals(nodeInfo->LocalName())); definition = nsContentUtils::LookupCustomElementDefinition(nodeInfo->GetDocument(), - nodeInfo->LocalName(), + nodeInfo->NameAtom(), nodeInfo->NamespaceID(), typeAtom); } diff --git a/parser/html/nsHtml5TreeOperation.cpp b/parser/html/nsHtml5TreeOperation.cpp index d747f80a8..22c805859 100644 --- a/parser/html/nsHtml5TreeOperation.cpp +++ b/parser/html/nsHtml5TreeOperation.cpp @@ -433,8 +433,9 @@ nsHtml5TreeOperation::CreateHTMLElement( RefPtr typeAtom = isValue.IsEmpty() ? tagAtom : NS_Atomize(isValue); + MOZ_ASSERT(nodeInfo->NameAtom()->Equals(nodeInfo->LocalName())); definition = nsContentUtils::LookupCustomElementDefinition(document, - nodeInfo->LocalName(), nodeInfo->NamespaceID(), typeAtom); + nodeInfo->NameAtom(), nodeInfo->NamespaceID(), typeAtom); if (definition) { willExecuteScript = true; -- cgit v1.2.3