Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Unified Diff: services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc

Issue 2871223002: memory-infra: add ProcessType and expose data in RequestGlobalDump() (Closed)
Patch Set: review comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc
diff --git a/services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc b/services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc
index 3b9fb7b3cf4346fa75749c5e987008b54c06858c..eee8fff0786bed6bd5975f858fb8fdbd8cb643f3 100644
--- a/services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc
+++ b/services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc
@@ -58,7 +58,30 @@ void ProcessLocalDumpManagerImpl::RequestProcessMemoryDump(
const base::trace_event::MemoryDumpRequestArgs& args,
const RequestProcessMemoryDumpCallback& callback) {
base::trace_event::MemoryDumpManager::GetInstance()->CreateProcessDump(
- args, callback);
+ args, base::Bind(&ProcessLocalDumpManagerImpl::OnProcessMemoryDumpDone,
+ base::Unretained(this), callback));
+}
+
+void ProcessLocalDumpManagerImpl::OnProcessMemoryDumpDone(
+ const RequestProcessMemoryDumpCallback& callback,
+ uint64_t dump_guid,
+ bool success,
+ const base::Optional<base::trace_event::MemoryDumpCallbackResult>& result) {
+ mojom::ProcessMemoryDumpPtr process_memory_dump(
+ mojom::ProcessMemoryDump::New());
+ process_memory_dump->process_type = config_.process_type();
+ if (result) {
+ process_memory_dump->os_dump = result->os_dump;
dcheng 2017/05/12 08:07:41 Is there a reason to switch from using StructTrait
Primiano Tucci (use gerrit) 2017/05/12 11:42:46 Yes. the MemoryDumpManager::CreateProcessDump() ca
+ process_memory_dump->chrome_dump = result->chrome_dump;
+ for (const auto& kv : result->extra_processes_dump) {
+ const base::ProcessId pid = kv.first;
+ const base::trace_event::MemoryDumpCallbackResult::OSMemDump&
+ os_mem_dump = kv.second;
+ DCHECK_EQ(0u, process_memory_dump->extra_processes_dump.count(pid));
+ process_memory_dump->extra_processes_dump[pid] = os_mem_dump;
+ }
+ }
+ callback.Run(dump_guid, success, std::move(process_memory_dump));
}
void ProcessLocalDumpManagerImpl::RequestGlobalMemoryDump(
@@ -70,23 +93,33 @@ void ProcessLocalDumpManagerImpl::RequestGlobalMemoryDump(
// CoordinatorImpl::RequestGlobalMemoryDump). If the delegate is in a child
// process, parallel requests will be cancelled.
//
- // TODO(chiniforooshan): Unify the child and browser behavior.
+ // TODO(primiano): Remove all this boilerplate. There should be no need of
+ // any lock, proxy, callback adaption or early out. The service is able to
+ // deal with queueing.
if (task_runner_) {
+ auto callback_proxy =
+ base::Bind(&ProcessLocalDumpManagerImpl::MemoryDumpCallbackProxy,
+ base::Unretained(this), callback);
task_runner_->PostTask(
FROM_HERE,
base::Bind(&mojom::Coordinator::RequestGlobalMemoryDump,
- base::Unretained(coordinator_.get()), args, callback));
+ base::Unretained(coordinator_.get()), args, callback_proxy));
return;
}
+ bool early_out_because_of_another_dump_pending = false;
{
base::AutoLock lock(pending_memory_dump_guid_lock_);
- if (pending_memory_dump_guid_) {
- callback.Run(args.dump_guid, false);
- return;
- }
- pending_memory_dump_guid_ = args.dump_guid;
+ if (pending_memory_dump_guid_)
+ early_out_because_of_another_dump_pending = true;
+ else
+ pending_memory_dump_guid_ = args.dump_guid;
+ }
+ if (early_out_because_of_another_dump_pending) {
+ callback.Run(args.dump_guid, false);
+ return;
}
+
auto callback_proxy =
base::Bind(&ProcessLocalDumpManagerImpl::MemoryDumpCallbackProxy,
base::Unretained(this), callback);
@@ -96,12 +129,17 @@ void ProcessLocalDumpManagerImpl::RequestGlobalMemoryDump(
void ProcessLocalDumpManagerImpl::MemoryDumpCallbackProxy(
const base::trace_event::GlobalMemoryDumpCallback& callback,
uint64_t dump_guid,
- bool success) {
+ bool success,
+ mojom::GlobalMemoryDumpPtr) {
{
base::AutoLock lock(pending_memory_dump_guid_lock_);
- DCHECK_NE(0U, pending_memory_dump_guid_);
pending_memory_dump_guid_ = 0;
}
+
+ // The GlobalMemoryDumpPtr argument is ignored. The actual data of the dump
+ // is exposed only through the service and is not passed back to base.
+ // TODO(primiano): All these roundtrips are transitional until we move all
+ // the clients of memory-infra to use directly the service. crbug.com/720352 .
callback.Run(dump_guid, success);
}

Powered by Google App Engine
This is Rietveld 408576698