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

Unified Diff: services/resource_coordinator/memory/coordinator/coordinator_impl.cc

Issue 2875673003: [Memory-UMA] Add ProcessMap, an Identity to Pid map (Closed)
Patch Set: Rebase 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/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 4cc1840ba72ab45b937cd767787ea13942f9bf9a..ebd6ce513b05b0e901f61d2da96998556041d029 100644
--- a/services/resource_coordinator/memory/coordinator/coordinator_impl.cc
+++ b/services/resource_coordinator/memory/coordinator/coordinator_impl.cc
@@ -13,9 +13,14 @@
#include "base/threading/platform_thread.h"
#include "base/trace_event/memory_dump_manager.h"
#include "base/trace_event/memory_dump_request_args.h"
+#include "content/public/common/service_manager_connection.h"
#include "services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.h"
#include "services/resource_coordinator/public/interfaces/memory/constants.mojom.h"
#include "services/resource_coordinator/public/interfaces/memory/memory_instrumentation.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
+#include "services/service_manager/public/cpp/identity.h"
+#include "services/service_manager/public/interfaces/constants.mojom.h"
+#include "services/service_manager/public/interfaces/service_manager.mojom.h"
namespace {
@@ -32,7 +37,8 @@ CoordinatorImpl* CoordinatorImpl::GetInstance() {
CoordinatorImpl::CoordinatorImpl(bool initialize_memory_dump_manager)
: failed_memory_dump_count_(0),
- initialize_memory_dump_manager_(initialize_memory_dump_manager) {
+ initialize_memory_dump_manager_(initialize_memory_dump_manager),
+ process_map_(nullptr) {
if (initialize_memory_dump_manager) {
// TODO(primiano): the current state where the coordinator also creates a
// client (ProcessLocalDumpManagerImpl) is contra-intuitive. BrowserMainLoop
@@ -53,7 +59,7 @@ void CoordinatorImpl::BindCoordinatorRequest(
const service_manager::BindSourceInfo& source_info,
mojom::CoordinatorRequest request) {
DCHECK(thread_checker_.CalledOnValidThread());
- bindings_.AddBinding(this, std::move(request));
+ bindings_.AddBinding(this, std::move(request), source_info.identity);
}
CoordinatorImpl::QueuedMemoryDumpRequest::QueuedMemoryDumpRequest(
@@ -107,10 +113,15 @@ void CoordinatorImpl::RegisterProcessLocalDumpManager(
process_manager.set_connection_error_handler(
base::Bind(&CoordinatorImpl::UnregisterProcessLocalDumpManager,
base::Unretained(this), process_manager.get()));
- auto result = process_managers_.insert(
- std::make_pair<mojom::ProcessLocalDumpManager*,
- mojom::ProcessLocalDumpManagerPtr>(
- process_manager.get(), std::move(process_manager)));
+ if (!process_map_)
+ InitProcessMap();
+ DCHECK(process_map_);
+ service_manager::Identity identity = bindings_.dispatch_context();
+ auto result =
+ process_managers_.insert(std::make_pair<mojom::ProcessLocalDumpManager*,
+ ProcessLocalDumpManagerEntry>(
+ process_manager.get(), std::make_pair(std::move(process_manager),
+ bindings_.dispatch_context())));
DCHECK(result.second);
}
@@ -135,15 +146,15 @@ void CoordinatorImpl::PerformNextQueuedGlobalMemoryDump() {
queued_memory_dump_requests_.front().args;
// No need to treat the service process different than other processes. The
- // service process will register itself as a ProcessLocalDumpManager and will
- // be treated like other process-local managers.
+ // service process will register itself as a ProcessLocalDumpManager and
+ // will be treated like other process-local managers.
pending_process_managers_.clear();
failed_memory_dump_count_ = 0;
for (const auto& key_value : process_managers_) {
pending_process_managers_.insert(key_value.first);
auto callback = base::Bind(&CoordinatorImpl::OnProcessMemoryDumpResponse,
base::Unretained(this), key_value.first);
- key_value.second->RequestProcessMemoryDump(args, callback);
+ key_value.second.first->RequestProcessMemoryDump(args, callback);
}
// Run the callback in case there are no process-local managers.
FinalizeGlobalMemoryDumpIfAllManagersReplied();
@@ -163,6 +174,14 @@ void CoordinatorImpl::OnProcessMemoryDumpResponse(
return;
}
if (process_memory_dump) {
+ // TODO(fmeawad): Debugging code only, the pid should be stored with the
+ // process memory dump
+ auto it = process_managers_.find(process_manager);
+ if (it != process_managers_.end()) {
+ base::ProcessId pid = process_map_->GetProcessId(it->second.second);
+ fprintf(stderr, "PID: %d\n", pid);
+ }
+
queued_memory_dump_requests_.front().process_memory_dumps.push_back(
std::move(process_memory_dump));
}
@@ -207,4 +226,18 @@ void CoordinatorImpl::FinalizeGlobalMemoryDumpIfAllManagersReplied() {
}
}
+void CoordinatorImpl::InitProcessMap() {
+ content::ServiceManagerConnection* service_manager_connection =
+ content::ServiceManagerConnection::GetForProcess();
+ DCHECK(service_manager_connection);
+ service_manager::mojom::ServiceManagerPtr service_manager;
+ content::ServiceManagerConnection::GetForProcess()
+ ->GetConnector()
+ ->BindInterface(service_manager::mojom::kServiceName, &service_manager);
+ service_manager::mojom::ServiceManagerListenerPtr listener;
+ service_manager::mojom::ServiceManagerListenerRequest request(&listener);
+ service_manager->AddListener(std::move(listener));
+ process_map_.reset(new ProcessMap(std::move(request)));
+}
+
} // namespace memory_instrumentation

Powered by Google App Engine
This is Rietveld 408576698