M1352874 and #516: make timeouts less aggressive

This commit is contained in:
Cameron Kaiser 2018-08-24 08:21:21 -07:00
parent 43534dea3a
commit 4c83f3281f
3 changed files with 18 additions and 1 deletions

View File

@ -70,7 +70,7 @@
#define MAX_IDLE_FUZZ_TIME_MS 90000 #define MAX_IDLE_FUZZ_TIME_MS 90000
// Min idle notification time in seconds. // Min idle notification time in seconds.
#define MIN_IDLE_NOTIFICATION_TIME_S 10 #define MIN_IDLE_NOTIFICATION_TIME_S 5
class nsIArray; class nsIArray;
class nsIBaseWindow; class nsIBaseWindow;

View File

@ -24,6 +24,7 @@ nsHtml5AtomEntry::~nsHtml5AtomEntry()
} }
nsHtml5AtomTable::nsHtml5AtomTable() nsHtml5AtomTable::nsHtml5AtomTable()
: mRecentlyUsedParserAtoms{}
{ {
#ifdef DEBUG #ifdef DEBUG
NS_GetMainThread(getter_AddRefs(mPermittedLookupThread)); NS_GetMainThread(getter_AddRefs(mPermittedLookupThread));
@ -44,13 +45,23 @@ nsHtml5AtomTable::GetAtom(const nsAString& aKey)
NS_ASSERTION(mPermittedLookupThread == currentThread, "Wrong thread!"); NS_ASSERTION(mPermittedLookupThread == currentThread, "Wrong thread!");
} }
#endif #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); nsIAtom* atom = NS_GetStaticAtom(aKey);
if (atom) { if (atom) {
mRecentlyUsedParserAtoms[index] = atom;
return atom; return atom;
} }
nsHtml5AtomEntry* entry = mTable.PutEntry(aKey); nsHtml5AtomEntry* entry = mTable.PutEntry(aKey);
if (!entry) { if (!entry) {
return nullptr; return nullptr;
} }
mRecentlyUsedParserAtoms[index] = entry->GetAtom();
return entry->GetAtom(); return entry->GetAtom();
} }

View File

@ -11,6 +11,8 @@
#include "nsIAtom.h" #include "nsIAtom.h"
#include "nsIThread.h" #include "nsIThread.h"
#define RECENTLY_USED_PARSER_ATOMS_SIZE 31
class nsHtml5Atom; class nsHtml5Atom;
class nsHtml5AtomEntry : public nsStringHashKey class nsHtml5AtomEntry : public nsStringHashKey
@ -87,6 +89,9 @@ class nsHtml5AtomTable
*/ */
void Clear() void Clear()
{ {
for (uint32_t i = 0; i < RECENTLY_USED_PARSER_ATOMS_SIZE; ++i) {
mRecentlyUsedParserAtoms[i] = nullptr;
}
mTable.Clear(); mTable.Clear();
} }
@ -99,6 +104,7 @@ class nsHtml5AtomTable
private: private:
nsTHashtable<nsHtml5AtomEntry> mTable; nsTHashtable<nsHtml5AtomEntry> mTable;
nsIAtom* mRecentlyUsedParserAtoms[RECENTLY_USED_PARSER_ATOMS_SIZE];
#ifdef DEBUG #ifdef DEBUG
nsCOMPtr<nsIThread> mPermittedLookupThread; nsCOMPtr<nsIThread> mPermittedLookupThread;
#endif #endif