summaryrefslogtreecommitdiffstats
path: root/parser/html/nsHtml5AtomTable.cpp
diff options
context:
space:
mode:
authoradeshkp <adeshkp@users.noreply.github.com>2018-08-04 14:22:42 +0530
committerwolfbeast <mcwerewolf@gmail.com>2018-08-06 11:10:10 +0200
commit36d06b9e75561f9d6ff518e67aaa29f9c9d1fd10 (patch)
treea86afb2f47312a1d0acd66a5c12b148c928abb0d /parser/html/nsHtml5AtomTable.cpp
parent51bdd3efbc001a3455b4ffb2c792994f8276c818 (diff)
downloadUXP-36d06b9e75561f9d6ff518e67aaa29f9c9d1fd10.tar
UXP-36d06b9e75561f9d6ff518e67aaa29f9c9d1fd10.tar.gz
UXP-36d06b9e75561f9d6ff518e67aaa29f9c9d1fd10.tar.lz
UXP-36d06b9e75561f9d6ff518e67aaa29f9c9d1fd10.tar.xz
UXP-36d06b9e75561f9d6ff518e67aaa29f9c9d1fd10.zip
Improve nsHtml5AtomTable performance (#693)
* cpp change * h change
Diffstat (limited to 'parser/html/nsHtml5AtomTable.cpp')
-rw-r--r--parser/html/nsHtml5AtomTable.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/parser/html/nsHtml5AtomTable.cpp b/parser/html/nsHtml5AtomTable.cpp
index d523f58b0..d9c18485d 100644
--- a/parser/html/nsHtml5AtomTable.cpp
+++ b/parser/html/nsHtml5AtomTable.cpp
@@ -31,7 +31,11 @@ nsHtml5AtomTable::nsHtml5AtomTable()
}
nsHtml5AtomTable::~nsHtml5AtomTable()
+ : mRecentlyUsedParserAtoms{}
{
+#ifdef DEBUG
+ NS_GetMainThread(getter_AddRefs(mPermittedLookupThread));
+#endif
}
nsIAtom*
@@ -44,13 +48,23 @@ nsHtml5AtomTable::GetAtom(const nsAString& aKey)
NS_ASSERTION(mPermittedLookupThread == currentThread, "Wrong thread!");
}
#endif
+
+ uint32_t index = mozilla::HashString(aKey) % RECENTLY_USED_PARSER_ATOMS_SIZE;
+ nsIAtom* cachedAtom = mRecentlyUsedParserAtoms[index];
+ if (cachedAtom && cachedAtom->Equals(aKey)) {
+ return cachedAtom;
+ }
+
nsIAtom* atom = NS_GetStaticAtom(aKey);
if (atom) {
+ mRecentlyUsedParserAtoms[index] = atom;
return atom;
}
nsHtml5AtomEntry* entry = mTable.PutEntry(aKey);
if (!entry) {
return nullptr;
}
+
+ mRecentlyUsedParserAtoms[index] = entry->GetAtom();
return entry->GetAtom();
}