mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 04:38:02 +00:00
Bug 1165768 (part 6) - Convert |gAtomTable| to |PLDHashTable2*|. r=froydnj.
--HG-- extra : rebase_source : 77fc4a57aa1e426089b857d88f32c378127f9429
This commit is contained in:
parent
ccee1b5b39
commit
399179a183
@ -41,7 +41,7 @@ using namespace mozilla;
|
||||
* sure it's only manipulated from the main thread. Probably the latter
|
||||
* is better, since the former would hurt performance.
|
||||
*/
|
||||
static PLDHashTable gAtomTable;
|
||||
static PLDHashTable2* gAtomTable;
|
||||
|
||||
class StaticAtomEntry : public PLDHashEntryHdr
|
||||
{
|
||||
@ -336,19 +336,21 @@ void
|
||||
NS_PurgeAtomTable()
|
||||
{
|
||||
delete gStaticAtomTable;
|
||||
gStaticAtomTable = nullptr;
|
||||
|
||||
if (gAtomTable.IsInitialized()) {
|
||||
if (gAtomTable) {
|
||||
#ifdef DEBUG
|
||||
const char* dumpAtomLeaks = PR_GetEnv("MOZ_DUMP_ATOM_LEAKS");
|
||||
if (dumpAtomLeaks && *dumpAtomLeaks) {
|
||||
uint32_t leaked = 0;
|
||||
printf("*** %d atoms still exist (including permanent):\n",
|
||||
gAtomTable.EntryCount());
|
||||
PL_DHashTableEnumerate(&gAtomTable, DumpAtomLeaks, &leaked);
|
||||
gAtomTable->EntryCount());
|
||||
PL_DHashTableEnumerate(gAtomTable, DumpAtomLeaks, &leaked);
|
||||
printf("*** %u non-permanent atoms leaked\n", leaked);
|
||||
}
|
||||
#endif
|
||||
PL_DHashTableFinish(&gAtomTable);
|
||||
delete gAtomTable;
|
||||
gAtomTable = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@ -397,17 +399,16 @@ AtomImpl::AtomImpl(nsStringBuffer* aStringBuffer, uint32_t aLength,
|
||||
|
||||
AtomImpl::~AtomImpl()
|
||||
{
|
||||
NS_PRECONDITION(gAtomTable.IsInitialized(), "uninitialized atom hashtable");
|
||||
MOZ_ASSERT(gAtomTable, "uninitialized atom hashtable");
|
||||
// Permanent atoms are removed from the hashtable at shutdown, and we
|
||||
// don't want to remove them twice. See comment above in
|
||||
// |AtomTableClearEntry|.
|
||||
if (!IsPermanentInDestructor()) {
|
||||
AtomTableKey key(mString, mLength, mHash);
|
||||
PL_DHashTableRemove(&gAtomTable, &key);
|
||||
if (gAtomTable.IsInitialized() && gAtomTable.EntryCount() == 0) {
|
||||
PL_DHashTableFinish(&gAtomTable);
|
||||
NS_ASSERTION(gAtomTable.EntryCount() == 0,
|
||||
"PL_DHashTableFinish changed the entry count");
|
||||
PL_DHashTableRemove(gAtomTable, &key);
|
||||
if (gAtomTable->EntryCount() == 0) {
|
||||
delete gAtomTable;
|
||||
gAtomTable = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@ -523,8 +524,8 @@ void
|
||||
NS_SizeOfAtomTablesIncludingThis(MallocSizeOf aMallocSizeOf,
|
||||
size_t* aMain, size_t* aStatic)
|
||||
{
|
||||
*aMain = gAtomTable.IsInitialized()
|
||||
? PL_DHashTableSizeOfExcludingThis(&gAtomTable,
|
||||
*aMain = gAtomTable
|
||||
? PL_DHashTableSizeOfExcludingThis(gAtomTable,
|
||||
SizeOfAtomTableEntryExcludingThis,
|
||||
aMallocSizeOf)
|
||||
: 0;
|
||||
@ -541,9 +542,9 @@ NS_SizeOfAtomTablesIncludingThis(MallocSizeOf aMallocSizeOf,
|
||||
static inline void
|
||||
EnsureTableExists()
|
||||
{
|
||||
if (!gAtomTable.IsInitialized()) {
|
||||
PL_DHashTableInit(&gAtomTable, &AtomTableOps,
|
||||
sizeof(AtomTableEntry), ATOM_HASHTABLE_INITIAL_LENGTH);
|
||||
if (!gAtomTable) {
|
||||
gAtomTable = new PLDHashTable2(&AtomTableOps, sizeof(AtomTableEntry),
|
||||
ATOM_HASHTABLE_INITIAL_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
@ -554,7 +555,7 @@ GetAtomHashEntry(const char* aString, uint32_t aLength, uint32_t* aHashOut)
|
||||
EnsureTableExists();
|
||||
AtomTableKey key(aString, aLength, aHashOut);
|
||||
// This is an infallible add.
|
||||
return static_cast<AtomTableEntry*>(PL_DHashTableAdd(&gAtomTable, &key));
|
||||
return static_cast<AtomTableEntry*>(PL_DHashTableAdd(gAtomTable, &key));
|
||||
}
|
||||
|
||||
static inline AtomTableEntry*
|
||||
@ -564,7 +565,7 @@ GetAtomHashEntry(const char16_t* aString, uint32_t aLength, uint32_t* aHashOut)
|
||||
EnsureTableExists();
|
||||
AtomTableKey key(aString, aLength, aHashOut);
|
||||
// This is an infallible add.
|
||||
return static_cast<AtomTableEntry*>(PL_DHashTableAdd(&gAtomTable, &key));
|
||||
return static_cast<AtomTableEntry*>(PL_DHashTableAdd(gAtomTable, &key));
|
||||
}
|
||||
|
||||
class CheckStaticAtomSizes
|
||||
@ -709,7 +710,8 @@ NS_NewPermanentAtom(const nsAString& aUTF16String)
|
||||
nsrefcnt
|
||||
NS_GetNumberOfAtoms(void)
|
||||
{
|
||||
return gAtomTable.EntryCount();
|
||||
MOZ_ASSERT(gAtomTable);
|
||||
return gAtomTable->EntryCount();
|
||||
}
|
||||
|
||||
nsIAtom*
|
||||
|
Loading…
x
Reference in New Issue
Block a user