Bug 1226732 - Use stable hashing and builtin sweeping for ipc::ObjectIdMap; r=billm
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user