Bug 1182772, optimize ProcessGlobal out from CC graph (and also TabChild's EventListeners), r=mccr8

This commit is contained in:
Olli Pettay 2015-07-11 16:45:49 +03:00
parent 62593d2448
commit ebd98e9199
2 changed files with 13 additions and 3 deletions

View File

@ -30,6 +30,7 @@
#include "nsFrameLoader.h"
#include "mozilla/EventListenerManager.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/ProcessGlobal.h"
#include "xpcpublic.h"
#include "nsObserverService.h"
#include "nsFocusManager.h"
@ -140,6 +141,14 @@ MarkChildMessageManagers(nsIMessageBroadcaster* aMM)
static void
MarkMessageManagers()
{
if (nsFrameMessageManager::GetChildProcessManager()) {
// ProcessGlobal's MarkForCC marks also ChildProcessManager.
ProcessGlobal* pg = ProcessGlobal::Get();
if (pg) {
pg->MarkForCC();
}
}
// The global message manager only exists in the root process.
if (!XRE_IsParentProcess()) {
return;
@ -172,9 +181,6 @@ MarkMessageManagers()
if (nsFrameMessageManager::sSameProcessParentManager) {
nsFrameMessageManager::sSameProcessParentManager->MarkForCC();
}
if (nsFrameMessageManager::GetChildProcessManager()) {
nsFrameMessageManager::GetChildProcessManager()->MarkForCC();
}
}
void

View File

@ -3504,6 +3504,10 @@ TabChildGlobal::MarkForCC()
if (mTabChild) {
mTabChild->MarkScopesForCC();
}
EventListenerManager* elm = GetExistingListenerManager();
if (elm) {
elm->MarkForCC();
}
return mMessageManager ? mMessageManager->MarkForCC() : false;
}