mozilla::ipc::IProtocol* CrashReporterParent::CloneProtocol(Channel* aChannel, mozilla::ipc::ProtocolCloneContext* aCtx) { #ifdef MOZ_CRASHREPORTER ContentParent* contentParent = aCtx->GetContentParent(); CrashReporter::ThreadId childThreadId = contentParent->Pid(); GeckoProcessType childProcessType = contentParent->Process()->GetProcessType(); nsAutoPtr<PCrashReporterParent> actor( contentParent->AllocPCrashReporterParent(childThreadId, childProcessType) ); if (!actor || !contentParent->RecvPCrashReporterConstructor(actor, childThreadId, childThreadId)) { return nullptr; } return actor.forget(); #else MOZ_CRASH("Not Implemented"); return nullptr; #endif }
NS_IMETHODIMP nsMemoryInfoDumper::DumpGCAndCCLogsToFile(const nsAString& aIdentifier, bool aDumpAllTraces, bool aDumpChildProcesses, nsIDumpGCAndCCLogsCallback* aCallback) { nsString identifier(aIdentifier); EnsureNonEmptyIdentifier(identifier); nsCOMPtr<nsIDumpGCAndCCLogsCallback> callbackHolder = new nsDumpGCAndCCLogsCallbackHolder(aCallback); if (aDumpChildProcesses) { nsTArray<ContentParent*> children; ContentParent::GetAll(children); for (uint32_t i = 0; i < children.Length(); i++) { ContentParent* cp = children[i]; nsCOMPtr<nsICycleCollectorLogSink> logSink = nsCycleCollector_createLogSink(); logSink->SetFilenameIdentifier(identifier); logSink->SetProcessIdentifier(cp->Pid()); Unused << cp->CycleCollectWithLogs(aDumpAllTraces, logSink, callbackHolder); } } nsCOMPtr<nsICycleCollectorListener> logger = do_CreateInstance("@mozilla.org/cycle-collector-logger;1"); if (aDumpAllTraces) { nsCOMPtr<nsICycleCollectorListener> allTracesLogger; logger->AllTraces(getter_AddRefs(allTracesLogger)); logger = allTracesLogger; } nsCOMPtr<nsICycleCollectorLogSink> logSink; logger->GetLogSink(getter_AddRefs(logSink)); logSink->SetFilenameIdentifier(identifier); nsJSContext::CycleCollectNow(logger); nsCOMPtr<nsIFile> gcLog, ccLog; logSink->GetGcLog(getter_AddRefs(gcLog)); logSink->GetCcLog(getter_AddRefs(ccLog)); callbackHolder->OnDump(gcLog, ccLog, /* parent = */ true); return NS_OK; }