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

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

Issue 2883693002: [Memory-UMA] Implement basic working prototype. (Closed)
Patch Set: Respecify dependent CL, which had somehow gotten lost. 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);
Primiano Tucci (use gerrit) 2017/05/15 03:48:10 don't see a strong need for this |initialize_proce
erikchen 2017/05/15 17:29:15 Done.
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 using ProcessLocalDumpManagerEntry =
67 std::pair<mojom::ProcessLocalDumpManagerPtr, service_manager::Identity>;
Primiano Tucci (use gerrit) 2017/05/15 03:48:09 this will: 1) make the code in the .cc file full
Primiano Tucci (use gerrit) 2017/05/15 16:35:05 discussed offline, I have a patch to clean this la
54 68
55 // mojom::Coordinator 69 // mojom::Coordinator
56 void RegisterProcessLocalDumpManager( 70 void RegisterProcessLocalDumpManager(
57 mojom::ProcessLocalDumpManagerPtr process_manager) override; 71 mojom::ProcessLocalDumpManagerPtr process_manager) override;
58 72
59 // Broadcasts a dump request to all the process-local managers registered and 73 // 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 74 // notifies when all of them have completed, or the global dump attempt
61 // failed. This is in the mojom::Coordinator interface. 75 // failed. This is in the mojom::Coordinator interface.
62 void RequestGlobalMemoryDump( 76 void RequestGlobalMemoryDump(
63 const base::trace_event::MemoryDumpRequestArgs& args, 77 const base::trace_event::MemoryDumpRequestArgs& args,
64 const RequestGlobalMemoryDumpCallback& callback) override; 78 const RequestGlobalMemoryDumpCallback& callback) override;
65 79
66 // Called when a process-local manager gets disconnected. 80 // Called when a process-local manager gets disconnected.
67 void UnregisterProcessLocalDumpManager( 81 void UnregisterProcessLocalDumpManager(
68 mojom::ProcessLocalDumpManager* process_manager); 82 mojom::ProcessLocalDumpManager* process_manager);
69 83
70 // Callback of RequestProcessMemoryDump. 84 // Callback of RequestProcessMemoryDump.
71 void OnProcessMemoryDumpResponse( 85 void OnProcessMemoryDumpResponse(
72 mojom::ProcessLocalDumpManager* process_manager, 86 mojom::ProcessLocalDumpManager* process_manager,
73 uint64_t dump_guid, 87 uint64_t dump_guid,
74 bool success, 88 bool success,
75 mojom::ProcessMemoryDumpPtr process_memory_dump); 89 mojom::ProcessMemoryDumpPtr process_memory_dump);
76 90
77 void PerformNextQueuedGlobalMemoryDump(); 91 void PerformNextQueuedGlobalMemoryDump();
78 void FinalizeGlobalMemoryDumpIfAllManagersReplied(); 92 void FinalizeGlobalMemoryDumpIfAllManagersReplied();
93 void InitProcessMap(service_manager::Connector* connector);
79 94
80 mojo::BindingSet<mojom::Coordinator> bindings_; 95 mojo::BindingSet<mojom::Coordinator, service_manager::Identity> bindings_;
81 96
82 // Registered ProcessLocalDumpManagers. 97 // Registered ProcessLocalDumpManagers.
83 std::map<mojom::ProcessLocalDumpManager*, mojom::ProcessLocalDumpManagerPtr> 98 std::map<mojom::ProcessLocalDumpManager*, ProcessLocalDumpManagerEntry>
84 process_managers_; 99 process_managers_;
85 100
86 // Pending process managers for RequestGlobalMemoryDump. 101 // Pending process managers for RequestGlobalMemoryDump.
87 std::set<mojom::ProcessLocalDumpManager*> pending_process_managers_; 102 std::set<mojom::ProcessLocalDumpManager*> pending_process_managers_;
88 int failed_memory_dump_count_; 103 int failed_memory_dump_count_;
89 std::list<QueuedMemoryDumpRequest> queued_memory_dump_requests_; 104 std::list<QueuedMemoryDumpRequest> queued_memory_dump_requests_;
90 105
91 const bool initialize_memory_dump_manager_; 106 const bool initialize_memory_dump_manager_;
92 107
93 base::ThreadChecker thread_checker_; 108 base::ThreadChecker thread_checker_;
94 109
110 std::unique_ptr<ProcessMap> process_map_;
111
95 DISALLOW_COPY_AND_ASSIGN(CoordinatorImpl); 112 DISALLOW_COPY_AND_ASSIGN(CoordinatorImpl);
96 }; 113 };
97 114
98 } // namespace memory_instrumentation 115 } // namespace memory_instrumentation
99 #endif // SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_ 116 #endif // SERVICES_RESOURCE_COORDINATOR_MEMORY_COORDINATOR_COORDINATOR_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698