diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-08-04 13:40:36 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-08-04 13:40:55 +0200 |
commit | 6577d13f01da675718ca5f061914581329c5c7f5 (patch) | |
tree | 334b9fdbf8401ad21638b083ca28c84e0bd8a7ed /parser/html/nsHtml5AtomTable.cpp | |
parent | ca87455cc5880897c8b921077819988feede90bd (diff) | |
download | UXP-6577d13f01da675718ca5f061914581329c5c7f5.tar UXP-6577d13f01da675718ca5f061914581329c5c7f5.tar.gz UXP-6577d13f01da675718ca5f061914581329c5c7f5.tar.lz UXP-6577d13f01da675718ca5f061914581329c5c7f5.tar.xz UXP-6577d13f01da675718ca5f061914581329c5c7f5.zip |
re-apply "Improve nsHtml5AtomTable performance (#693)" (#695)"
This reverts commit ca87455cc5880897c8b921077819988feede90bd.
Diffstat (limited to 'parser/html/nsHtml5AtomTable.cpp')
-rw-r--r-- | parser/html/nsHtml5AtomTable.cpp | 14 |
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(); } |