| Index: services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h
|
| diff --git a/services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h b/services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h
|
| index 117661997368983b166c9a275728e054f488a42b..c75493c612cb035980d0e0ff0ccda4a5d4e04f97 100644
|
| --- a/services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h
|
| +++ b/services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h
|
| @@ -5,6 +5,8 @@
|
| #ifndef SERVICES_RESOURCE_COORDINATOR_PUBLIC_CPP_MEMORY_MEMORY_DUMP_MANAGER_DELEGATE_IMPL_H_
|
| #define SERVICES_RESOURCE_COORDINATOR_PUBLIC_CPP_MEMORY_MEMORY_DUMP_MANAGER_DELEGATE_IMPL_H_
|
|
|
| +#include "base/single_thread_task_runner.h"
|
| +#include "base/synchronization/lock.h"
|
| #include "base/trace_event/memory_dump_manager.h"
|
| #include "base/trace_event/memory_dump_request_args.h"
|
| #include "mojo/public/cpp/bindings/binding.h"
|
| @@ -14,34 +16,77 @@
|
|
|
| namespace memory_instrumentation {
|
|
|
| +// This is the bridge between MemoryDumpManager and the Coordinator service.
|
| +// This indirection is needed to avoid a dependency from //base, where
|
| +// MemoryDumpManager lives, to //services, where the Coordinator service lives.
|
| +//
|
| +// This cannot just be implemented by the Coordinator service, because there is
|
| +// no Coordinator service in child processes. So, in a child process, the
|
| +// delegate remotely connects to the Coordinator service. In the browser
|
| +// process, the delegate locally connects to the Coordinator service.
|
| class MemoryDumpManagerDelegateImpl
|
| : public base::trace_event::MemoryDumpManagerDelegate,
|
| public mojom::ProcessLocalDumpManager {
|
| public:
|
| - // Use to bind to a remote coordinator.
|
| - MemoryDumpManagerDelegateImpl(
|
| - service_manager::InterfaceProvider* interface_provider);
|
| + class Config {
|
| + public:
|
| + Config(service_manager::InterfaceProvider* interface_provider)
|
| + : interface_provider_(interface_provider), coordinator_(nullptr) {}
|
| + Config(Coordinator* coordinator)
|
| + : interface_provider_(nullptr), coordinator_(coordinator) {}
|
| + ~Config();
|
|
|
| - // Use to bind to a coordinator in the same process.
|
| - MemoryDumpManagerDelegateImpl(Coordinator* coordinator);
|
| + service_manager::InterfaceProvider* interface_provider() const {
|
| + return interface_provider_;
|
| + }
|
| +
|
| + Coordinator* coordinator() const { return coordinator_; }
|
| +
|
| + private:
|
| + service_manager::InterfaceProvider* interface_provider_;
|
| + Coordinator* coordinator_;
|
| + bool is_test_config_;
|
| + };
|
| +
|
| + explicit MemoryDumpManagerDelegateImpl(const Config& config);
|
| ~MemoryDumpManagerDelegateImpl() override;
|
|
|
| - bool IsCoordinator() const;
|
| + bool IsCoordinator() const override;
|
|
|
| // The base::trace_event::MemoryDumpManager calls this.
|
| void RequestGlobalMemoryDump(
|
| const base::trace_event::MemoryDumpRequestArgs& args,
|
| const base::trace_event::MemoryDumpCallback& callback) override;
|
|
|
| + Config config() { return config_; }
|
| + void SetAsNonCoordinatorForTesting();
|
| +
|
| private:
|
| + friend std::default_delete<MemoryDumpManagerDelegateImpl>; // For testing
|
| + friend class MemoryDumpManagerDelegateImplTest; // For testing
|
| +
|
| // The ProcessLocalDumpManager interface. The coordinator calls this.
|
| void RequestProcessMemoryDump(
|
| const base::trace_event::MemoryDumpRequestArgs& args,
|
| const RequestProcessMemoryDumpCallback& callback) override;
|
|
|
| - bool is_coordinator_;
|
| + // A proxy callback for updating |pending_memory_dump_guid_|.
|
| + void MemoryDumpCallbackProxy(
|
| + const base::trace_event::MemoryDumpCallback& callback,
|
| + uint64_t dump_guid,
|
| + bool success);
|
| +
|
| mojom::CoordinatorPtr coordinator_;
|
| mojo::Binding<mojom::ProcessLocalDumpManager> binding_;
|
| + const Config config_;
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| + uint64_t pending_memory_dump_guid_;
|
| +
|
| + // Prevents racy access to |pending_memory_dump_guid_|.
|
| + base::Lock pending_memory_dump_guid_lock_;
|
| +
|
| + // Prevents racy access to |initialized_|.
|
| + base::Lock initialized_lock_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegateImpl);
|
| };
|
|
|