Index: services/resource_coordinator/memory/coordinator/coordinator_impl.cc |
diff --git a/services/resource_coordinator/memory/coordinator/coordinator_impl.cc b/services/resource_coordinator/memory/coordinator/coordinator_impl.cc |
index 55d08e9e086ecda227628abb8c22ef4d27004a82..4cc1840ba72ab45b937cd767787ea13942f9bf9a 100644 |
--- a/services/resource_coordinator/memory/coordinator/coordinator_impl.cc |
+++ b/services/resource_coordinator/memory/coordinator/coordinator_impl.cc |
@@ -34,8 +34,11 @@ CoordinatorImpl::CoordinatorImpl(bool initialize_memory_dump_manager) |
: failed_memory_dump_count_(0), |
initialize_memory_dump_manager_(initialize_memory_dump_manager) { |
if (initialize_memory_dump_manager) { |
+ // TODO(primiano): the current state where the coordinator also creates a |
+ // client (ProcessLocalDumpManagerImpl) is contra-intuitive. BrowserMainLoop |
+ // should be doing this. |
ProcessLocalDumpManagerImpl::CreateInstance( |
- ProcessLocalDumpManagerImpl::Config(this)); |
+ ProcessLocalDumpManagerImpl::Config(this, mojom::ProcessType::BROWSER)); |
base::trace_event::MemoryDumpManager::GetInstance()->set_tracing_process_id( |
mojom::kServiceTracingProcessId); |
} |
@@ -81,7 +84,8 @@ void CoordinatorImpl::RequestGlobalMemoryDump( |
<< base::trace_event::MemoryDumpLevelOfDetailToString( |
args.level_of_detail) |
<< ") is already in the queue"; |
- callback.Run(args.dump_guid, false /* success */); |
+ callback.Run(args.dump_guid, false /* success */, |
+ nullptr /* global_memory_dump */); |
return; |
} |
} |
@@ -121,8 +125,7 @@ void CoordinatorImpl::UnregisterProcessLocalDumpManager( |
DCHECK(!queued_memory_dump_requests_.empty()); |
OnProcessMemoryDumpResponse( |
process_manager, queued_memory_dump_requests_.front().args.dump_guid, |
- false /* success */, |
- base::Optional<base::trace_event::MemoryDumpCallbackResult>()); |
+ false /* success */, nullptr /* process_memory_dump */); |
} |
} |
@@ -150,15 +153,20 @@ void CoordinatorImpl::OnProcessMemoryDumpResponse( |
mojom::ProcessLocalDumpManager* process_manager, |
uint64_t dump_guid, |
bool success, |
- const base::Optional<base::trace_event::MemoryDumpCallbackResult>& result) { |
+ mojom::ProcessMemoryDumpPtr process_memory_dump) { |
auto it = pending_process_managers_.find(process_manager); |
- DCHECK(!queued_memory_dump_requests_.empty()); |
- if (queued_memory_dump_requests_.front().args.dump_guid != dump_guid || |
+ if (queued_memory_dump_requests_.empty() || |
+ queued_memory_dump_requests_.front().args.dump_guid != dump_guid || |
it == pending_process_managers_.end()) { |
VLOG(1) << "Received unexpected memory dump response: " << dump_guid; |
return; |
} |
+ if (process_memory_dump) { |
+ queued_memory_dump_requests_.front().process_memory_dumps.push_back( |
+ std::move(process_memory_dump)); |
+ } |
+ |
pending_process_managers_.erase(it); |
if (!success) { |
@@ -166,6 +174,7 @@ void CoordinatorImpl::OnProcessMemoryDumpResponse( |
VLOG(1) << base::trace_event::MemoryDumpManager::kLogPrefix |
<< " failed because of NACK from provider"; |
} |
+ |
FinalizeGlobalMemoryDumpIfAllManagersReplied(); |
} |
@@ -173,13 +182,20 @@ void CoordinatorImpl::FinalizeGlobalMemoryDumpIfAllManagersReplied() { |
if (pending_process_managers_.size() > 0) |
return; |
- DCHECK(!queued_memory_dump_requests_.empty()); |
- { |
- const auto& callback = queued_memory_dump_requests_.front().callback; |
- const bool global_success = failed_memory_dump_count_ == 0; |
- callback.Run(queued_memory_dump_requests_.front().args.dump_guid, |
- global_success); |
+ if (queued_memory_dump_requests_.empty()) { |
+ NOTREACHED(); |
+ return; |
} |
+ |
+ // TODO(hjd,fmeawad): At this point the |process_memory_dumps| accumulated in |
+ // queued_memory_dump_requests_.front() should be normalized (merge |
+ // |extra_process_dump|, compute CMM) into a GlobalMemoryDumpPtr and passed |
+ // below. |
+ |
+ const auto& callback = queued_memory_dump_requests_.front().callback; |
+ const bool global_success = failed_memory_dump_count_ == 0; |
+ callback.Run(queued_memory_dump_requests_.front().args.dump_guid, |
+ global_success, nullptr /* global_memory_dump */); |
queued_memory_dump_requests_.pop_front(); |
// Schedule the next queued dump (if applicable). |