Bug 996785 - Rename CPOW object map (r=mrbkap)

This commit is contained in:
Bill McCloskey
2014-05-16 16:40:35 -07:00
parent 0f7f7b7bb9
commit b84b86c8ce
3 changed files with 33 additions and 32 deletions

View File

@@ -79,7 +79,7 @@ class JavaScriptChild
private: private:
ObjectId lastId_; ObjectId lastId_;
JSRuntime *rt_; JSRuntime *rt_;
ObjectIdCache ids_; ObjectToIdMap ids_;
}; };
} // mozilla } // mozilla

View File

@@ -15,21 +15,21 @@ using namespace JS;
using namespace mozilla; using namespace mozilla;
using namespace mozilla::jsipc; using namespace mozilla::jsipc;
ObjectStore::ObjectStore() IdToObjectMap::IdToObjectMap()
: table_(SystemAllocPolicy()) : table_(SystemAllocPolicy())
{ {
} }
bool bool
ObjectStore::init() IdToObjectMap::init()
{ {
return table_.init(32); return table_.init(32);
} }
void void
ObjectStore::trace(JSTracer *trc) IdToObjectMap::trace(JSTracer *trc)
{ {
for (ObjectTable::Range r(table_.all()); !r.empty(); r.popFront()) { for (Table::Range r(table_.all()); !r.empty(); r.popFront()) {
DebugOnly<JSObject *> prior = r.front().value().get(); DebugOnly<JSObject *> prior = r.front().value().get();
JS_CallHeapObjectTracer(trc, &r.front().value(), "ipc-object"); JS_CallHeapObjectTracer(trc, &r.front().value(), "ipc-object");
MOZ_ASSERT(r.front().value() == prior); MOZ_ASSERT(r.front().value() == prior);
@@ -37,51 +37,51 @@ ObjectStore::trace(JSTracer *trc)
} }
JSObject * JSObject *
ObjectStore::find(ObjectId id) IdToObjectMap::find(ObjectId id)
{ {
ObjectTable::Ptr p = table_.lookup(id); Table::Ptr p = table_.lookup(id);
if (!p) if (!p)
return nullptr; return nullptr;
return p->value(); return p->value();
} }
bool bool
ObjectStore::add(ObjectId id, JSObject *obj) IdToObjectMap::add(ObjectId id, JSObject *obj)
{ {
return table_.put(id, obj); return table_.put(id, obj);
} }
void void
ObjectStore::remove(ObjectId id) IdToObjectMap::remove(ObjectId id)
{ {
table_.remove(id); table_.remove(id);
} }
ObjectIdCache::ObjectIdCache() ObjectToIdMap::ObjectToIdMap()
: table_(nullptr) : table_(nullptr)
{ {
} }
ObjectIdCache::~ObjectIdCache() ObjectToIdMap::~ObjectToIdMap()
{ {
if (table_) { if (table_) {
dom::AddForDeferredFinalization<ObjectIdTable, nsAutoPtr>(table_); dom::AddForDeferredFinalization<Table, nsAutoPtr>(table_);
table_ = nullptr; table_ = nullptr;
} }
} }
bool bool
ObjectIdCache::init() ObjectToIdMap::init()
{ {
MOZ_ASSERT(!table_); MOZ_ASSERT(!table_);
table_ = new ObjectIdTable(SystemAllocPolicy()); table_ = new Table(SystemAllocPolicy());
return table_ && table_->init(32); return table_ && table_->init(32);
} }
void void
ObjectIdCache::trace(JSTracer *trc) ObjectToIdMap::trace(JSTracer *trc)
{ {
for (ObjectIdTable::Range r(table_->all()); !r.empty(); r.popFront()) { for (Table::Range r(table_->all()); !r.empty(); r.popFront()) {
JSObject *obj = r.front().key(); JSObject *obj = r.front().key();
JS_CallObjectTracer(trc, &obj, "ipc-id"); JS_CallObjectTracer(trc, &obj, "ipc-id");
MOZ_ASSERT(obj == r.front().key()); MOZ_ASSERT(obj == r.front().key());
@@ -89,16 +89,16 @@ ObjectIdCache::trace(JSTracer *trc)
} }
ObjectId ObjectId
ObjectIdCache::find(JSObject *obj) ObjectToIdMap::find(JSObject *obj)
{ {
ObjectIdTable::Ptr p = table_->lookup(obj); Table::Ptr p = table_->lookup(obj);
if (!p) if (!p)
return 0; return 0;
return p->value(); return p->value();
} }
bool bool
ObjectIdCache::add(JSContext *cx, JSObject *obj, ObjectId id) ObjectToIdMap::add(JSContext *cx, JSObject *obj, ObjectId id)
{ {
if (!table_->put(obj, id)) if (!table_->put(obj, id))
return false; return false;
@@ -111,15 +111,16 @@ ObjectIdCache::add(JSContext *cx, JSObject *obj, ObjectId id)
* been moved. * been moved.
*/ */
/* static */ void /* static */ void
ObjectIdCache::keyMarkCallback(JSTracer *trc, JSObject *key, void *data) { ObjectToIdMap::keyMarkCallback(JSTracer *trc, JSObject *key, void *data)
ObjectIdTable* table = static_cast<ObjectIdTable*>(data); {
Table *table = static_cast<Table*>(data);
JSObject *prior = key; JSObject *prior = key;
JS_CallObjectTracer(trc, &key, "ObjectIdCache::table_ key"); JS_CallObjectTracer(trc, &key, "ObjectIdCache::table_ key");
table->rekeyIfMoved(prior, key); table->rekeyIfMoved(prior, key);
} }
void void
ObjectIdCache::remove(JSObject *obj) ObjectToIdMap::remove(JSObject *obj)
{ {
table_->remove(obj); table_->remove(obj);
} }

View File

@@ -37,14 +37,14 @@ class CpowIdHolder : public CpowHolder
}; };
// Map ids -> JSObjects // Map ids -> JSObjects
class ObjectStore class IdToObjectMap
{ {
typedef js::DefaultHasher<ObjectId> TableKeyHasher; typedef js::DefaultHasher<ObjectId> TableKeyHasher;
typedef js::HashMap<ObjectId, JS::Heap<JSObject *>, TableKeyHasher, js::SystemAllocPolicy> ObjectTable; typedef js::HashMap<ObjectId, JS::Heap<JSObject *>, TableKeyHasher, js::SystemAllocPolicy> Table;
public: public:
ObjectStore(); IdToObjectMap();
bool init(); bool init();
void trace(JSTracer *trc); void trace(JSTracer *trc);
@@ -54,18 +54,18 @@ class ObjectStore
void remove(ObjectId id); void remove(ObjectId id);
private: private:
ObjectTable table_; Table table_;
}; };
// Map JSObjects -> ids // Map JSObjects -> ids
class ObjectIdCache class ObjectToIdMap
{ {
typedef js::PointerHasher<JSObject *, 3> Hasher; typedef js::PointerHasher<JSObject *, 3> Hasher;
typedef js::HashMap<JSObject *, ObjectId, Hasher, js::SystemAllocPolicy> ObjectIdTable; typedef js::HashMap<JSObject *, ObjectId, Hasher, js::SystemAllocPolicy> Table;
public: public:
ObjectIdCache(); ObjectToIdMap();
~ObjectIdCache(); ~ObjectToIdMap();
bool init(); bool init();
void trace(JSTracer *trc); void trace(JSTracer *trc);
@@ -77,7 +77,7 @@ class ObjectIdCache
private: private:
static void keyMarkCallback(JSTracer *trc, JSObject *key, void *data); static void keyMarkCallback(JSTracer *trc, JSObject *key, void *data);
ObjectIdTable *table_; Table *table_;
}; };
class JavaScriptShared class JavaScriptShared
@@ -129,7 +129,7 @@ class JavaScriptShared
} }
protected: protected:
ObjectStore objects_; IdToObjectMap objects_;
}; };
// Use 47 at most, to be safe, since jsval privates are encoded as doubles. // Use 47 at most, to be safe, since jsval privates are encoded as doubles.