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

Side by Side Diff: services/resource_coordinator/memory/coordinator/coordinator_impl.h

Issue 2883693002: [Memory-UMA] Implement basic working prototype. (Closed)
Patch Set: Tests working. 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_ 5 #ifndef SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_
6 #define SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_ 6 #define SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_
7 7
8 #include <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
11 11
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/threading/thread_checker.h" 13 #include "base/threading/thread_checker.h"
14 #include "base/trace_event/memory_dump_request_args.h" 14 #include "base/trace_event/memory_dump_request_args.h"
15 #include "mojo/public/cpp/bindings/binding.h" 15 #include "mojo/public/cpp/bindings/binding.h"
16 #include "mojo/public/cpp/bindings/binding_set.h" 16 #include "mojo/public/cpp/bindings/binding_set.h"
17 #include "services/resource_coordinator/memory/coordinator/process_map.h"
17 #include "services/resource_coordinator/public/cpp/memory/coordinator.h" 18 #include "services/resource_coordinator/public/cpp/memory/coordinator.h"
18 #include "services/resource_coordinator/public/interfaces/memory/memory_instrume ntation.mojom.h" 19 #include "services/resource_coordinator/public/interfaces/memory/memory_instrume ntation.mojom.h"
19 20
21 namespace service_manager {
22 class Connector;
23 }
24
20 namespace memory_instrumentation { 25 namespace memory_instrumentation {
21 26
22 class CoordinatorImpl : public Coordinator, public mojom::Coordinator { 27 class CoordinatorImpl : public Coordinator, public mojom::Coordinator {
23 public: 28 public:
24 // The getter of the unique instance. 29 // The getter of the unique instance.
25 static CoordinatorImpl* GetInstance(); 30 static CoordinatorImpl* GetInstance();
26 31
27 explicit CoordinatorImpl(bool initialize_memory_dump_manager); 32 CoordinatorImpl(bool initialize_memory_dump_manager,
33 service_manager::Connector* connector,
34 bool initialize_process_map);
28 35
29 // Coordinator 36 // Coordinator
30 void BindCoordinatorRequest( 37 void BindCoordinatorRequest(
31 const service_manager::BindSourceInfo& source_info, 38 const service_manager::BindSourceInfo& source_info,
32 mojom::CoordinatorRequest) override; 39 mojom::CoordinatorRequest) override;
33 40
34 bool initialize_memory_dump_manager() const { 41 bool initialize_memory_dump_manager() const {
35 return initialize_memory_dump_manager_; 42 return initialize_memory_dump_manager_;
36 } 43 }
37 44
45 protected:
46 // virtual for testing.
47 virtual service_manager::Identity GetDispatchContext() const;
48 ~CoordinatorImpl() override;
49
38 private: 50 private:
39 friend std::default_delete<CoordinatorImpl>; // For testing 51 friend std::default_delete<CoordinatorImpl>; // For testing
40 friend class CoordinatorImplTest; // For testing 52 friend class CoordinatorImplTest; // For testing
41 53
42 struct QueuedMemoryDumpRequest { 54 struct QueuedMemoryDumpRequest {
43 QueuedMemoryDumpRequest(const base::trace_event::MemoryDumpRequestArgs args, 55 QueuedMemoryDumpRequest(const base::trace_event::MemoryDumpRequestArgs args,
44 const RequestGlobalMemoryDumpCallback callback); 56 const RequestGlobalMemoryDumpCallback callback);
45 ~QueuedMemoryDumpRequest(); 57 ~QueuedMemoryDumpRequest();
46 const base::trace_event::MemoryDumpRequestArgs args; 58 const base::trace_event::MemoryDumpRequestArgs args;
47 const RequestGlobalMemoryDumpCallback callback; 59 const RequestGlobalMemoryDumpCallback callback;
48 60
49 // Collects the data received from OnProcessMemoryDumpResponse(). 61 // Collects the data received from OnProcessMemoryDumpResponse().
50 std::vector<mojom::ProcessMemoryDumpPtr> process_memory_dumps; 62 std::vector<std::pair<base::ProcessId, mojom::ProcessMemoryDumpPtr>>
63 process_memory_dumps;
51 }; 64 };
52 65
53 ~CoordinatorImpl() override; 66 typedef std::pair<mojom::ProcessLocalDumpManagerPtr,
dcheng 2017/05/13 20:22:37 Nit: prefer using to typedef
erikchen 2017/05/14 04:49:16 Done.
67 service_manager::Identity>
68 ProcessLocalDumpManagerEntry;
54 69
55 // mojom::Coordinator 70 // mojom::Coordinator
56 void RegisterProcessLocalDumpManager( 71 void RegisterProcessLocalDumpManager(
57 mojom::ProcessLocalDumpManagerPtr process_manager) override; 72 mojom::ProcessLocalDumpManagerPtr process_manager) override;
58 73
59 // Broadcasts a dump request to all the process-local managers registered and 74 // Broadcasts a dump request to all the process-local managers registered and
60 // notifies when all of them have completed, or the global dump attempt 75 // notifies when all of them have completed, or the global dump attempt
61 // failed. This is in the mojom::Coordinator interface. 76 // failed. This is in the mojom::Coordinator interface.
62 void RequestGlobalMemoryDump( 77 void RequestGlobalMemoryDump(
63 const base::trace_event::MemoryDumpRequestArgs& args, 78 const base::trace_event::MemoryDumpRequestArgs& args,
64 const RequestGlobalMemoryDumpCallback& callback) override; 79 const RequestGlobalMemoryDumpCallback& callback) override;
65 80
66 // Called when a process-local manager gets disconnected. 81 // Called when a process-local manager gets disconnected.
67 void UnregisterProcessLocalDumpManager( 82 void UnregisterProcessLocalDumpManager(
68 mojom::ProcessLocalDumpManager* process_manager); 83 mojom::ProcessLocalDumpManager* process_manager);
69 84
70 // Callback of RequestProcessMemoryDump. 85 // Callback of RequestProcessMemoryDump.
71 void OnProcessMemoryDumpResponse( 86 void OnProcessMemoryDumpResponse(
72 mojom::ProcessLocalDumpManager* process_manager, 87 mojom::ProcessLocalDumpManager* process_manager,
73 uint64_t dump_guid, 88 uint64_t dump_guid,
74 bool success, 89 bool success,
75 mojom::ProcessMemoryDumpPtr process_memory_dump); 90 mojom::ProcessMemoryDumpPtr process_memory_dump);
76 91
77 void PerformNextQueuedGlobalMemoryDump(); 92 void PerformNextQueuedGlobalMemoryDump();
78 void FinalizeGlobalMemoryDumpIfAllManagersReplied(); 93 void FinalizeGlobalMemoryDumpIfAllManagersReplied();
94 void InitProcessMap(service_manager::Connector* connector);
79 95
80 mojo::BindingSet<mojom::Coordinator> bindings_; 96 mojo::BindingSet<mojom::Coordinator, service_manager::Identity> bindings_;
81 97
82 // Registered ProcessLocalDumpManagers. 98 // Registered ProcessLocalDumpManagers.
83 std::map<mojom::ProcessLocalDumpManager*, mojom::ProcessLocalDumpManagerPtr> 99 std::map<mojom::ProcessLocalDumpManager*, ProcessLocalDumpManagerEntry>
84 process_managers_; 100 process_managers_;
85 101
86 // Pending process managers for RequestGlobalMemoryDump. 102 // Pending process managers for RequestGlobalMemoryDump.
87 std::set<mojom::ProcessLocalDumpManager*> pending_process_managers_; 103 std::set<mojom::ProcessLocalDumpManager*> pending_process_managers_;
88 int failed_memory_dump_count_; 104 int failed_memory_dump_count_;
89 std::list<QueuedMemoryDumpRequest> queued_memory_dump_requests_; 105 std::list<QueuedMemoryDumpRequest> queued_memory_dump_requests_;
90 106
91 const bool initialize_memory_dump_manager_; 107 const bool initialize_memory_dump_manager_;
92 108
93 base::ThreadChecker thread_checker_; 109 base::ThreadChecker thread_checker_;
94 110
111 std::unique_ptr<ProcessMap> process_map_;
112
95 DISALLOW_COPY_AND_ASSIGN(CoordinatorImpl); 113 DISALLOW_COPY_AND_ASSIGN(CoordinatorImpl);
96 }; 114 };
97 115
98 } // namespace memory_instrumentation 116 } // namespace memory_instrumentation
99 #endif // SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_ 117 #endif // SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698