| 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 c582e23b5924f4bd4d1fb2a43a2228c662e630d0..e3c2551159ce2a02926881f1d085aaeb804fd5d0 100644
|
| --- a/services/resource_coordinator/memory/coordinator/coordinator_impl.cc
|
| +++ b/services/resource_coordinator/memory/coordinator/coordinator_impl.cc
|
| @@ -4,40 +4,53 @@
|
|
|
| #include "services/resource_coordinator/memory/coordinator/coordinator_impl.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| -#include "base/lazy_instance.h"
|
| #include "base/location.h"
|
| #include "base/logging.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| +#include "base/single_thread_task_runner.h"
|
| +#include "base/threading/platform_thread.h"
|
| #include "base/trace_event/memory_dump_manager.h"
|
| #include "base/trace_event/memory_dump_request_args.h"
|
| +#include "services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h"
|
| +#include "services/resource_coordinator/public/interfaces/memory/constants.mojom.h"
|
| #include "services/resource_coordinator/public/interfaces/memory/memory_instrumentation.mojom.h"
|
|
|
| -namespace memory_instrumentation {
|
| -
|
| namespace {
|
|
|
| -base::LazyInstance<CoordinatorImpl>::Leaky g_coordinator =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| +memory_instrumentation::CoordinatorImpl* g_coordinator_impl;
|
|
|
| } // namespace
|
|
|
| +namespace memory_instrumentation {
|
| +
|
| // static
|
| CoordinatorImpl* CoordinatorImpl::GetInstance() {
|
| - return g_coordinator.Pointer();
|
| + return g_coordinator_impl;
|
| }
|
|
|
| -// TODO(chiniforooshan): Initialize the global MemoryDumpManager instance here.
|
| -// This is how the global MemoryDumpManager gets a reference to the delegate on
|
| -// the service (read the browser) process for service process memory dumps. This
|
| -// can be done when the delegate implementation is landed.
|
| -CoordinatorImpl::CoordinatorImpl() : failed_memory_dump_count_(0) {}
|
| +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) {
|
| + MemoryDumpManagerDelegateImpl::Config config(this);
|
| + auto delegate = base::MakeUnique<MemoryDumpManagerDelegateImpl>(config);
|
| + base::trace_event::MemoryDumpManager::GetInstance()->set_tracing_process_id(
|
| + mojom::kServiceTracingProcessId);
|
| + base::trace_event::MemoryDumpManager::GetInstance()->Initialize(
|
| + std::move(delegate));
|
| + }
|
| + g_coordinator_impl = this;
|
| +}
|
|
|
| -CoordinatorImpl::~CoordinatorImpl() {}
|
| +CoordinatorImpl::~CoordinatorImpl() {
|
| + g_coordinator_impl = nullptr;
|
| +}
|
|
|
| void CoordinatorImpl::BindCoordinatorRequest(
|
| mojom::CoordinatorRequest request) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| bindings_.AddBinding(this, std::move(request));
|
| }
|
|
|
| @@ -52,7 +65,6 @@ void CoordinatorImpl::RequestGlobalMemoryDump(
|
| const base::trace_event::MemoryDumpRequestArgs& args,
|
| const RequestGlobalMemoryDumpCallback& callback) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| bool another_dump_already_in_progress = !queued_memory_dump_requests_.empty();
|
|
|
| // If this is a periodic or peak memory dump request and there already is
|
| @@ -89,7 +101,6 @@ void CoordinatorImpl::RequestGlobalMemoryDump(
|
| void CoordinatorImpl::RegisterProcessLocalDumpManager(
|
| mojom::ProcessLocalDumpManagerPtr process_manager) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| process_manager.set_connection_error_handler(
|
| base::Bind(&CoordinatorImpl::UnregisterProcessLocalDumpManager,
|
| base::Unretained(this), process_manager.get()));
|
| @@ -102,7 +113,8 @@ void CoordinatorImpl::RegisterProcessLocalDumpManager(
|
|
|
| void CoordinatorImpl::UnregisterProcessLocalDumpManager(
|
| mojom::ProcessLocalDumpManager* process_manager) {
|
| - DCHECK(process_managers_.erase(process_manager) == 1);
|
| + size_t num_deleted = process_managers_.erase(process_manager);
|
| + DCHECK(num_deleted == 1);
|
|
|
| // Check if we are waiting for an ack from this process-local manager.
|
| if (pending_process_managers_.find(process_manager) !=
|
|
|