diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-08-05 11:35:53 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-08-05 11:35:53 +0200 |
commit | 6bd66b1728eeddb058066edda740aaeb2ceaec23 (patch) | |
tree | 985faf01c526763515731569fa01a99f4dbef36e /parser | |
parent | e0a8dcfed131ffa58a5e2cb1d30fe48c745c2fdc (diff) | |
parent | 559824514dc95e02fbe81f1786e6ac13ee8e9d55 (diff) | |
download | UXP-6bd66b1728eeddb058066edda740aaeb2ceaec23.tar UXP-6bd66b1728eeddb058066edda740aaeb2ceaec23.tar.gz UXP-6bd66b1728eeddb058066edda740aaeb2ceaec23.tar.lz UXP-6bd66b1728eeddb058066edda740aaeb2ceaec23.tar.xz UXP-6bd66b1728eeddb058066edda740aaeb2ceaec23.zip |
Merge branch 'master' into js-modules
Diffstat (limited to 'parser')
-rw-r--r-- | parser/html/nsHtml5AtomTable.cpp | 11 | ||||
-rw-r--r-- | parser/html/nsHtml5AtomTable.h | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/parser/html/nsHtml5AtomTable.cpp b/parser/html/nsHtml5AtomTable.cpp index d523f58b0..ae35791f3 100644 --- a/parser/html/nsHtml5AtomTable.cpp +++ b/parser/html/nsHtml5AtomTable.cpp @@ -24,6 +24,7 @@ nsHtml5AtomEntry::~nsHtml5AtomEntry() } nsHtml5AtomTable::nsHtml5AtomTable() + : mRecentlyUsedParserAtoms{} { #ifdef DEBUG NS_GetMainThread(getter_AddRefs(mPermittedLookupThread)); @@ -44,13 +45,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(); } diff --git a/parser/html/nsHtml5AtomTable.h b/parser/html/nsHtml5AtomTable.h index 43f9b5f2f..b0dc2f678 100644 --- a/parser/html/nsHtml5AtomTable.h +++ b/parser/html/nsHtml5AtomTable.h @@ -11,6 +11,8 @@ #include "nsIAtom.h" #include "nsIThread.h" +#define RECENTLY_USED_PARSER_ATOMS_SIZE 31 + class nsHtml5Atom; class nsHtml5AtomEntry : public nsStringHashKey @@ -87,6 +89,9 @@ class nsHtml5AtomTable */ void Clear() { + for (uint32_t i = 0; i < RECENTLY_USED_PARSER_ATOMS_SIZE; ++i) { + mRecentlyUsedParserAtoms[i] = nullptr; + } mTable.Clear(); } @@ -99,6 +104,7 @@ class nsHtml5AtomTable private: nsTHashtable<nsHtml5AtomEntry> mTable; + nsIAtom* mRecentlyUsedParserAtoms[RECENTLY_USED_PARSER_ATOMS_SIZE]; #ifdef DEBUG nsCOMPtr<nsIThread> mPermittedLookupThread; #endif |