зеркало из https://github.com/mozilla/gecko-dev.git
Bug 968766 - Part i: Move the document.all NodeLists into a separate hashtable; r=jst
This commit is contained in:
Родитель
4204e87a21
Коммит
58bd97db70
|
@ -241,9 +241,6 @@ nsIdentifierMapEntry::Traverse(nsCycleCollectionTraversalCallback* aCallback)
|
|||
"mIdentifierMap mNameContentList");
|
||||
aCallback->NoteXPCOMChild(static_cast<nsIDOMNodeList*>(mNameContentList));
|
||||
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCallback, "mIdentifierMap mDocAllList");
|
||||
aCallback->NoteXPCOMChild(static_cast<nsIDOMNodeList*>(mDocAllList));
|
||||
|
||||
if (mImageElement) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCallback,
|
||||
"mIdentifierMap mImageElement element");
|
||||
|
|
|
@ -189,9 +189,6 @@ public:
|
|||
|
||||
void Traverse(nsCycleCollectionTraversalCallback* aCallback);
|
||||
|
||||
void SetDocAllList(nsContentList* aContentList) { mDocAllList = aContentList; }
|
||||
nsContentList* GetDocAllList() { return mDocAllList; }
|
||||
|
||||
struct ChangeCallback {
|
||||
nsIDocument::IDTargetObserver mCallback;
|
||||
void* mData;
|
||||
|
@ -236,7 +233,6 @@ private:
|
|||
// The elements are stored as weak pointers.
|
||||
nsSmallVoidArray mIdContentList;
|
||||
nsRefPtr<nsBaseContentList> mNameContentList;
|
||||
nsRefPtr<nsContentList> mDocAllList;
|
||||
nsAutoPtr<nsTHashtable<ChangeCallbackEntry> > mChangeCallbacks;
|
||||
nsRefPtr<Element> mImageElement;
|
||||
};
|
||||
|
|
|
@ -199,8 +199,9 @@ nsHTMLDocument::~nsHTMLDocument()
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_11(nsHTMLDocument, nsDocument,
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_12(nsHTMLDocument, nsDocument,
|
||||
mAll,
|
||||
mAllMap,
|
||||
mImages,
|
||||
mApplets,
|
||||
mEmbeds,
|
||||
|
@ -2596,11 +2597,8 @@ nsHTMLDocument::GetDocumentAllList(const nsAString& aID, nsresult *aResult)
|
|||
{
|
||||
*aResult = NS_OK;
|
||||
|
||||
nsIdentifierMapEntry *entry = mIdentifierMap.PutEntry(aID);
|
||||
if (!entry) {
|
||||
*aResult = NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
return nullptr;
|
||||
if (nsContentList* docAllList = mAllMap.GetWeak(aID)) {
|
||||
return docAllList;
|
||||
}
|
||||
|
||||
Element* root = GetRootElement();
|
||||
|
@ -2608,15 +2606,10 @@ nsHTMLDocument::GetDocumentAllList(const nsAString& aID, nsresult *aResult)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<nsContentList> docAllList = entry->GetDocAllList();
|
||||
if (!docAllList) {
|
||||
nsCOMPtr<nsIAtom> id = do_GetAtom(aID);
|
||||
|
||||
docAllList = new nsContentList(root, DocAllResultMatch,
|
||||
nullptr, nullptr, true, id);
|
||||
entry->SetDocAllList(docAllList);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAtom> id = do_GetAtom(aID);
|
||||
nsRefPtr<nsContentList> docAllList =
|
||||
new nsContentList(root, DocAllResultMatch, nullptr, nullptr, true, id);
|
||||
mAllMap.Put(aID, docAllList);
|
||||
return docAllList;
|
||||
}
|
||||
|
||||
|
|
|
@ -292,6 +292,7 @@ protected:
|
|||
nsRefPtr<nsContentList> mFormControls;
|
||||
|
||||
nsRefPtr<mozilla::dom::HTMLAllCollection> mAll;
|
||||
nsRefPtrHashtable<nsStringHashKey, nsContentList> mAllMap;
|
||||
|
||||
/** # of forms in the document, synchronously set */
|
||||
int32_t mNumForms;
|
||||
|
|
|
@ -1145,6 +1145,37 @@ static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
|
|||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_INHERITED_12(_class, _base, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(_class, _base) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_f12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(_class, _base) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_f12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
#define NS_CYCLE_COLLECTION_NOTE_EDGE_NAME CycleCollectionNoteEdgeName
|
||||
|
||||
#endif // nsCycleCollectionParticipant_h__
|
||||
|
|
Загрузка…
Ссылка в новой задаче