| Index: services/resource_coordinator/memory/coordinator/coordinator_impl.h
|
| diff --git a/services/resource_coordinator/memory/coordinator/coordinator_impl.h b/services/resource_coordinator/memory/coordinator/coordinator_impl.h
|
| index a7cfd96039929494ac2b09c291f5dc01f0e4d9e9..7d78d01c7f2fda5ca163d204447ed332fa2f5f05 100644
|
| --- a/services/resource_coordinator/memory/coordinator/coordinator_impl.h
|
| +++ b/services/resource_coordinator/memory/coordinator/coordinator_impl.h
|
| @@ -24,6 +24,12 @@ class Connector;
|
|
|
| namespace memory_instrumentation {
|
|
|
| +// Memory instrumentation service. It serves two purposes:
|
| +// - Handles a registry of the processes that have a memory instrumentation
|
| +// client library instance (../../public/cpp/memory).
|
| +// - Provides global (i.e. for all processes) memory snapshots on demand.
|
| +// Global snapshots are obtained by requesting in-process snapshots from each
|
| +// registered client and aggregating them.
|
| class CoordinatorImpl : public Coordinator, public mojom::Coordinator {
|
| public:
|
| // The getter of the unique instance.
|
| @@ -32,7 +38,7 @@ class CoordinatorImpl : public Coordinator, public mojom::Coordinator {
|
| CoordinatorImpl(bool initialize_memory_dump_manager,
|
| service_manager::Connector* connector);
|
|
|
| - // Coordinator
|
| + // Binds a client library to this coordinator instance.
|
| void BindCoordinatorRequest(
|
| const service_manager::BindSourceInfo& source_info,
|
| mojom::CoordinatorRequest) override;
|
| @@ -41,18 +47,29 @@ class CoordinatorImpl : public Coordinator, public mojom::Coordinator {
|
| return initialize_memory_dump_manager_;
|
| }
|
|
|
| + // mojom::Coordinator implementation.
|
| + void RegisterProcessLocalDumpManager(
|
| + mojom::ProcessLocalDumpManagerPtr process_manager) override;
|
| + void UnregisterProcessLocalDumpManager(
|
| + mojom::ProcessLocalDumpManager* process_manager);
|
| + void RequestGlobalMemoryDump(
|
| + const base::trace_event::MemoryDumpRequestArgs& args,
|
| + const RequestGlobalMemoryDumpCallback& callback) override;
|
| +
|
| protected:
|
| // virtual for testing.
|
| - virtual service_manager::Identity GetDispatchContext() const;
|
| + virtual service_manager::Identity GetClientIdentityForCurrentRequest() const;
|
| ~CoordinatorImpl() override;
|
|
|
| private:
|
| friend std::default_delete<CoordinatorImpl>; // For testing
|
| friend class CoordinatorImplTest; // For testing
|
|
|
| + // Holds data for pending requests enqueued via RequestGlobalMemoryDump().
|
| struct QueuedMemoryDumpRequest {
|
| - QueuedMemoryDumpRequest(const base::trace_event::MemoryDumpRequestArgs args,
|
| - const RequestGlobalMemoryDumpCallback callback);
|
| + QueuedMemoryDumpRequest(
|
| + const base::trace_event::MemoryDumpRequestArgs& args,
|
| + const RequestGlobalMemoryDumpCallback callback);
|
| ~QueuedMemoryDumpRequest();
|
| const base::trace_event::MemoryDumpRequestArgs args;
|
| const RequestGlobalMemoryDumpCallback callback;
|
| @@ -62,23 +79,15 @@ class CoordinatorImpl : public Coordinator, public mojom::Coordinator {
|
| process_memory_dumps;
|
| };
|
|
|
| - using ProcessLocalDumpManagerEntry =
|
| - std::pair<mojom::ProcessLocalDumpManagerPtr, service_manager::Identity>;
|
| -
|
| - // mojom::Coordinator
|
| - void RegisterProcessLocalDumpManager(
|
| - mojom::ProcessLocalDumpManagerPtr process_manager) override;
|
| -
|
| - // Broadcasts a dump request to all the process-local managers registered and
|
| - // notifies when all of them have completed, or the global dump attempt
|
| - // failed. This is in the mojom::Coordinator interface.
|
| - void RequestGlobalMemoryDump(
|
| - const base::trace_event::MemoryDumpRequestArgs& args,
|
| - const RequestGlobalMemoryDumpCallback& callback) override;
|
| + // Holds the identy and remote reference of registered clients.
|
| + struct ClientInfo {
|
| + ClientInfo(const service_manager::Identity&,
|
| + mojom::ProcessLocalDumpManagerPtr);
|
| + ~ClientInfo();
|
|
|
| - // Called when a process-local manager gets disconnected.
|
| - void UnregisterProcessLocalDumpManager(
|
| - mojom::ProcessLocalDumpManager* process_manager);
|
| + const service_manager::Identity identity;
|
| + const mojom::ProcessLocalDumpManagerPtr client;
|
| + };
|
|
|
| // Callback of RequestProcessMemoryDump.
|
| void OnProcessMemoryDumpResponse(
|
| @@ -92,19 +101,25 @@ class CoordinatorImpl : public Coordinator, public mojom::Coordinator {
|
|
|
| mojo::BindingSet<mojom::Coordinator, service_manager::Identity> bindings_;
|
|
|
| - // Registered ProcessLocalDumpManagers.
|
| - std::map<mojom::ProcessLocalDumpManager*, ProcessLocalDumpManagerEntry>
|
| - process_managers_;
|
| + // Map of registered clients.
|
| + std::map<mojom::ProcessLocalDumpManager*, std::unique_ptr<ClientInfo>>
|
| + clients_;
|
|
|
| - // Pending process managers for RequestGlobalMemoryDump.
|
| - std::set<mojom::ProcessLocalDumpManager*> pending_process_managers_;
|
| - int failed_memory_dump_count_;
|
| + // Oustanding dump requests, enqueued via RequestGlobalMemoryDump().
|
| std::list<QueuedMemoryDumpRequest> queued_memory_dump_requests_;
|
|
|
| + // When a dump, requested via RequestGlobalMemoryDump(), is in progress this
|
| + // set contains the subset of registerd |clients_| that have not yet replied
|
| + // to the local dump request (via RequestProcessMemoryDump()) .
|
| + std::set<mojom::ProcessLocalDumpManager*> pending_clients_for_current_dump_;
|
| +
|
| + int failed_memory_dump_count_;
|
| +
|
| const bool initialize_memory_dump_manager_;
|
|
|
| base::ThreadChecker thread_checker_;
|
|
|
| + // Maintains a map of service_manager::Identity -> pid for registered clients.
|
| std::unique_ptr<ProcessMap> process_map_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CoordinatorImpl);
|
|
|