Bug 1226732 - Use stable hashing and builtin sweeping for ipc::ObjectIdMap; r=billm

This commit is contained in:
Terrence Cole
2015-11-25 11:59:09 -08:00
parent 34c006ba22
commit 1919c2a750
2 changed files with 10 additions and 35 deletions

View File

@@ -104,25 +104,13 @@ ObjectToIdMap::init()
void
ObjectToIdMap::trace(JSTracer* trc)
{
for (Table::Enum e(table_); !e.empty(); e.popFront()) {
JSObject* obj = e.front().key();
JS_CallUnbarrieredObjectTracer(trc, &obj, "ipc-object");
if (obj != e.front().key())
e.rekeyFront(obj);
}
table_.trace(trc);
}
void
ObjectToIdMap::sweep()
{
for (Table::Enum e(table_); !e.empty(); e.popFront()) {
JSObject* obj = e.front().key();
JS_UpdateWeakPointerAfterGCUnbarriered(&obj);
if (!obj)
e.removeFront();
else if (obj != e.front().key())
e.rekeyFront(obj);
}
table_.sweep();
}
ObjectId
@@ -137,23 +125,7 @@ ObjectToIdMap::find(JSObject* obj)
bool
ObjectToIdMap::add(JSContext* cx, JSObject* obj, ObjectId id)
{
if (!table_.put(obj, id))
return false;
JS_StoreObjectPostBarrierCallback(cx, keyMarkCallback, obj, &table_);
return true;
}
/*
* This function is called during minor GCs for each key in the HashMap that has
* been moved.
*/
/* static */ void
ObjectToIdMap::keyMarkCallback(JSTracer* trc, JSObject* key, void* data)
{
Table* table = static_cast<Table*>(data);
JSObject* prior = key;
JS_CallUnbarrieredObjectTracer(trc, &key, "ObjectIdCache::table_ key");
table->rekeyIfMoved(prior, key);
return table_.put(obj, id);
}
void