From 3373c511d27cda0aa1a367c8b45c973fa9b1ed49 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Mon, 24 Sep 2012 14:05:30 +0300 Subject: [PATCH 1/5] Bug 793517 - Make nsDOMEventTargetHelper to unmark listeners during canSkip, r=mccr8 --- content/events/src/nsDOMEventTargetHelper.cpp | 17 +++++++++++++++++ content/events/src/nsDOMEventTargetHelper.h | 2 +- dom/src/events/nsJSEventListener.cpp | 11 ++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/content/events/src/nsDOMEventTargetHelper.cpp b/content/events/src/nsDOMEventTargetHelper.cpp index c75afc0bead..8b8fa9d116d 100644 --- a/content/events/src/nsDOMEventTargetHelper.cpp +++ b/content/events/src/nsDOMEventTargetHelper.cpp @@ -43,6 +43,23 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMEventTargetHelper) NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mListenerManager) NS_IMPL_CYCLE_COLLECTION_UNLINK_END +NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsDOMEventTargetHelper) + if (tmp->IsBlack()) { + if (tmp->mListenerManager) { + tmp->mListenerManager->UnmarkGrayJSListeners(); + } + return true; + } +NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END + +NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(nsDOMEventTargetHelper) + return tmp->IsBlack(); +NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END + +NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(nsDOMEventTargetHelper) + return tmp->IsBlack(); +NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END + NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMEventTargetHelper) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_ENTRY(nsISupports) diff --git a/content/events/src/nsDOMEventTargetHelper.h b/content/events/src/nsDOMEventTargetHelper.h index 2fc1131cd11..1f398a9b921 100644 --- a/content/events/src/nsDOMEventTargetHelper.h +++ b/content/events/src/nsDOMEventTargetHelper.h @@ -26,7 +26,7 @@ public: nsDOMEventTargetHelper() : mOwner(nullptr), mHasOrHasHadOwner(false) {} virtual ~nsDOMEventTargetHelper(); NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMEventTargetHelper) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsDOMEventTargetHelper) NS_DECL_NSIDOMEVENTTARGET void AddEventListener(const nsAString& aType, diff --git a/dom/src/events/nsJSEventListener.cpp b/dom/src/events/nsJSEventListener.cpp index ec84f0faeaa..a6349b49440 100644 --- a/dom/src/events/nsJSEventListener.cpp +++ b/dom/src/events/nsJSEventListener.cpp @@ -70,7 +70,16 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsJSEventListener) NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mContext) } NS_IMPL_CYCLE_COLLECTION_UNLINK_END -NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsJSEventListener) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsJSEventListener) + if (NS_UNLIKELY(cb.WantDebugInfo()) && tmp->mEventName) { + nsAutoCString name; + name.AppendLiteral("nsJSEventListener handlerName="); + name.Append( + NS_ConvertUTF16toUTF8(nsDependentAtomString(tmp->mEventName)).get()); + cb.DescribeRefCountedNode(tmp->mRefCnt.get(), name.get()); + } else { + NS_IMPL_CYCLE_COLLECTION_DESCRIBE(nsJSEventListener, tmp->mRefCnt.get()) + } NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mContext) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END From 0d24c3121d90b800ee16189aa6f7bf01eeac7b25 Mon Sep 17 00:00:00 2001 From: Kyle Huey Date: Mon, 24 Sep 2012 07:29:24 -0700 Subject: [PATCH 2/5] Bug 793554: Devirtualize mozilla::css::Loader::[AddRef|Release] r=dbaron --- layout/style/Loader.cpp | 3 --- layout/style/Loader.h | 7 +------ 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index f357b444c8a..b231e46a18f 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -537,9 +537,6 @@ Loader::~Loader() // they're all done. } -NS_IMPL_ADDREF(Loader) -NS_IMPL_RELEASE(Loader) - void Loader::DropDocumentReference(void) { diff --git a/layout/style/Loader.h b/layout/style/Loader.h index 256b78585b5..01a33baa809 100644 --- a/layout/style/Loader.h +++ b/layout/style/Loader.h @@ -123,9 +123,7 @@ public: Loader(nsIDocument*); ~Loader(); - // This isn't a COM class but it's reference-counted like one. - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_INLINE_DECL_REFCOUNTING(Loader) void DropDocumentReference(); // notification that doc is going away @@ -467,9 +465,6 @@ private: // the load data needs access to the document... nsIDocument* mDocument; // the document we live for - // Refcounting - nsAutoRefCnt mRefCnt; - NS_DECL_OWNINGTHREAD // Number of datas still waiting to be notified on if we're notifying on a // whole bunch at once (e.g. in one of the stop methods). This is used to From a0648b9ee4c9fc9e55d90c789ccf1b5ca6942541 Mon Sep 17 00:00:00 2001 From: John Ford Date: Mon, 24 Sep 2012 12:50:53 -0700 Subject: [PATCH 3/5] bug 776783 - enable gaia packaging on Mac OS X rs=cjones DONTBUILD --- b2g/config/mozconfigs/macosx64_gecko/nightly | 2 ++ 1 file changed, 2 insertions(+) diff --git a/b2g/config/mozconfigs/macosx64_gecko/nightly b/b2g/config/mozconfigs/macosx64_gecko/nightly index 15515ad66e8..f29ee2d62bc 100644 --- a/b2g/config/mozconfigs/macosx64_gecko/nightly +++ b/b2g/config/mozconfigs/macosx64_gecko/nightly @@ -30,4 +30,6 @@ ENABLE_MARIONETTE=1 export CXXFLAGS=-DMOZ_ENABLE_JS_DUMP +GAIADIR=$topsrcdir/gaia + . "$topsrcdir/b2g/config/mozconfigs/common.override" From 91520a7f5650770b67cdccd6df7844bff881a180 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Mon, 24 Sep 2012 23:25:35 +0300 Subject: [PATCH 4/5] Bug 792385 - Try to skip nsJSEventListener in CC, r=mccr8 --- dom/src/events/nsJSEventListener.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dom/src/events/nsJSEventListener.cpp b/dom/src/events/nsJSEventListener.cpp index a6349b49440..afe2610120e 100644 --- a/dom/src/events/nsJSEventListener.cpp +++ b/dom/src/events/nsJSEventListener.cpp @@ -90,7 +90,22 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(nsJSEventListener) NS_IMPL_CYCLE_COLLECTION_TRACE_END NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsJSEventListener) - return tmp->IsBlackForCC(); + if (tmp->IsBlackForCC()) { + return true; + } + // If we have a target, it is the one which has tmp as onfoo handler. + if (tmp->mTarget) { + nsXPCOMCycleCollectionParticipant* cp = nullptr; + CallQueryInterface(tmp->mTarget, &cp); + nsISupports* canonical = nullptr; + tmp->mTarget->QueryInterface(NS_GET_IID(nsCycleCollectionISupports), + reinterpret_cast(&canonical)); + // Usually CanSkip ends up unmarking the event listeners of mTarget, + // so tmp may become black. + if (cp && canonical && cp->CanSkip(canonical, true)) { + return tmp->IsBlackForCC(); + } + } NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(nsJSEventListener) From c5eb8f618c5875553bfd40e68b86c68882e2ae18 Mon Sep 17 00:00:00 2001 From: John Ford Date: Mon, 24 Sep 2012 13:38:15 -0700 Subject: [PATCH 5/5] bug 776783 - enable gaia packaging on Linux rs=cjones DONTBUILD --- b2g/config/mozconfigs/linux32_gecko/nightly | 2 ++ b2g/config/mozconfigs/linux64_gecko/nightly | 2 ++ 2 files changed, 4 insertions(+) diff --git a/b2g/config/mozconfigs/linux32_gecko/nightly b/b2g/config/mozconfigs/linux32_gecko/nightly index 9c3aaa9add4..cf5b1f0f002 100644 --- a/b2g/config/mozconfigs/linux32_gecko/nightly +++ b/b2g/config/mozconfigs/linux32_gecko/nightly @@ -42,4 +42,6 @@ ENABLE_MARIONETTE=1 ac_add_options --disable-elf-hack export CXXFLAGS=-DMOZ_ENABLE_JS_DUMP +GAIADIR=$topsrcdir/gaia + . "$topsrcdir/b2g/config/mozconfigs/common.override" diff --git a/b2g/config/mozconfigs/linux64_gecko/nightly b/b2g/config/mozconfigs/linux64_gecko/nightly index b209e92c6c2..2503d51d119 100644 --- a/b2g/config/mozconfigs/linux64_gecko/nightly +++ b/b2g/config/mozconfigs/linux64_gecko/nightly @@ -42,4 +42,6 @@ ENABLE_MARIONETTE=1 ac_add_options --disable-elf-hack export CXXFLAGS=-DMOZ_ENABLE_JS_DUMP +GAIADIR=$topsrcdir/gaia + . "$topsrcdir/b2g/config/mozconfigs/common.override"