OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 5 #ifndef BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
6 #define BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 6 #define BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/atomicops.h" | 10 #include "base/atomicops.h" |
11 #include "base/containers/hash_tables.h" | 11 #include "base/containers/hash_tables.h" |
12 #include "base/containers/scoped_ptr_map.h" | 12 #include "base/containers/scoped_ptr_map.h" |
13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
14 #include "base/memory/singleton.h" | 14 #include "base/memory/singleton.h" |
15 #include "base/synchronization/lock.h" | 15 #include "base/synchronization/lock.h" |
16 #include "base/timer/timer.h" | 16 #include "base/timer/timer.h" |
17 #include "base/trace_event/memory_dump_request_args.h" | 17 #include "base/trace_event/memory_dump_request_args.h" |
18 #include "base/trace_event/process_memory_dump.h" | 18 #include "base/trace_event/process_memory_dump.h" |
19 #include "base/trace_event/process_memory_maps_dump_provider.h" | |
20 #include "base/trace_event/process_memory_totals_dump_provider.h" | |
19 #include "base/trace_event/trace_event.h" | 21 #include "base/trace_event/trace_event.h" |
20 | 22 |
21 namespace base { | 23 namespace base { |
22 | 24 |
23 class SingleThreadTaskRunner; | 25 class SingleThreadTaskRunner; |
24 class Thread; | 26 class Thread; |
25 | 27 |
26 namespace trace_event { | 28 namespace trace_event { |
27 | 29 |
28 class MemoryDumpManagerDelegate; | 30 class MemoryDumpManagerDelegate; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
90 const MemoryDumpCallback& callback); | 92 const MemoryDumpCallback& callback); |
91 | 93 |
92 // Same as above (still asynchronous), but without callback. | 94 // Same as above (still asynchronous), but without callback. |
93 void RequestGlobalDump(MemoryDumpType dump_type, | 95 void RequestGlobalDump(MemoryDumpType dump_type, |
94 MemoryDumpLevelOfDetail level_of_detail); | 96 MemoryDumpLevelOfDetail level_of_detail); |
95 | 97 |
96 // TraceLog::EnabledStateObserver implementation. | 98 // TraceLog::EnabledStateObserver implementation. |
97 void OnTraceLogEnabled() override; | 99 void OnTraceLogEnabled() override; |
98 void OnTraceLogDisabled() override; | 100 void OnTraceLogDisabled() override; |
99 | 101 |
102 // Registers and unregisters the process metrics dump providers for the | |
103 // |process|. Some processes cannot access metrics due to sandbox. To | |
104 // workaround the issue the coordinator process dumps statistics about the | |
Primiano Tucci (use gerrit)
2015/11/03 15:14:08
the manager should not need to know about all this
| |
105 // associated processes. | |
106 void RegisterProcessMetricsProvidersFor(ProcessHandle process); | |
107 void UnregisterProcessMetricsProvidersFor(ProcessHandle process); | |
108 | |
100 // Returns the MemoryDumpSessionState object, which is shared by all the | 109 // Returns the MemoryDumpSessionState object, which is shared by all the |
101 // ProcessMemoryDump and MemoryAllocatorDump instances through all the tracing | 110 // ProcessMemoryDump and MemoryAllocatorDump instances through all the tracing |
102 // session lifetime. | 111 // session lifetime. |
103 const scoped_refptr<MemoryDumpSessionState>& session_state() const { | 112 const scoped_refptr<MemoryDumpSessionState>& session_state() const { |
104 return session_state_; | 113 return session_state_; |
105 } | 114 } |
106 | 115 |
107 // Returns a unique id for identifying the processes. The id can be | 116 // Returns a unique id for identifying the processes. The id can be |
108 // retrieved by child processes only when tracing is enabled. This is | 117 // retrieved by child processes only when tracing is enabled. This is |
109 // intended to express cross-process sharing of memory dumps on the | 118 // intended to express cross-process sharing of memory dumps on the |
(...skipping 12 matching lines...) Expand all Loading... | |
122 void set_dumper_registrations_ignored_for_testing(bool ignored) { | 131 void set_dumper_registrations_ignored_for_testing(bool ignored) { |
123 dumper_registrations_ignored_for_testing_ = ignored; | 132 dumper_registrations_ignored_for_testing_ = ignored; |
124 } | 133 } |
125 | 134 |
126 private: | 135 private: |
127 friend struct DefaultDeleter<MemoryDumpManager>; // For the testing instance. | 136 friend struct DefaultDeleter<MemoryDumpManager>; // For the testing instance. |
128 friend struct DefaultSingletonTraits<MemoryDumpManager>; | 137 friend struct DefaultSingletonTraits<MemoryDumpManager>; |
129 friend class MemoryDumpManagerDelegate; | 138 friend class MemoryDumpManagerDelegate; |
130 friend class MemoryDumpManagerTest; | 139 friend class MemoryDumpManagerTest; |
131 | 140 |
141 using ProcessTotalsDumpProvidersMap = | |
142 ScopedPtrMap<ProcessHandle, scoped_ptr<ProcessMemoryTotalsDumpProvider>>; | |
143 using ProcessMapsDumpProvidersMap = | |
144 ScopedPtrMap<ProcessHandle, scoped_ptr<ProcessMemoryMapsDumpProvider>>; | |
145 | |
132 // Descriptor struct used to hold information about registered MDPs. It is | 146 // Descriptor struct used to hold information about registered MDPs. It is |
133 // deliberately copyable, in order to allow it to be used as std::set value. | 147 // deliberately copyable, in order to allow it to be used as std::set value. |
134 struct MemoryDumpProviderInfo { | 148 struct MemoryDumpProviderInfo { |
135 MemoryDumpProviderInfo( | 149 MemoryDumpProviderInfo( |
136 MemoryDumpProvider* dump_provider, | 150 MemoryDumpProvider* dump_provider, |
137 const char* name, | 151 const char* name, |
138 const scoped_refptr<SingleThreadTaskRunner>& task_runner, | 152 const scoped_refptr<SingleThreadTaskRunner>& task_runner, |
139 const MemoryDumpProvider::Options& options); | 153 const MemoryDumpProvider::Options& options); |
140 ~MemoryDumpProviderInfo(); | 154 ~MemoryDumpProviderInfo(); |
141 | 155 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
233 | 247 |
234 // Continues the ProcessMemoryDump started by CreateProcessDump(), hopping | 248 // Continues the ProcessMemoryDump started by CreateProcessDump(), hopping |
235 // across threads as needed as specified by MDPs in RegisterDumpProvider(). | 249 // across threads as needed as specified by MDPs in RegisterDumpProvider(). |
236 void ContinueAsyncProcessDump( | 250 void ContinueAsyncProcessDump( |
237 scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); | 251 scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); |
238 | 252 |
239 // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by thread | 253 // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by thread |
240 // affinity (MDPs belonging to the same thread are adjacent). | 254 // affinity (MDPs belonging to the same thread are adjacent). |
241 MemoryDumpProviderInfoSet dump_providers_; | 255 MemoryDumpProviderInfoSet dump_providers_; |
242 | 256 |
257 // MemoryDumpManager owns the memory maps and totals providers for all the | |
258 // associated processes. | |
259 ProcessTotalsDumpProvidersMap process_totals_providers_map_; | |
260 ProcessMapsDumpProvidersMap process_mmaps_providers_map_; | |
261 | |
243 // Shared among all the PMDs to keep state scoped to the tracing session. | 262 // Shared among all the PMDs to keep state scoped to the tracing session. |
244 scoped_refptr<MemoryDumpSessionState> session_state_; | 263 scoped_refptr<MemoryDumpSessionState> session_state_; |
245 | 264 |
246 MemoryDumpManagerDelegate* delegate_; // Not owned. | 265 MemoryDumpManagerDelegate* delegate_; // Not owned. |
247 | 266 |
248 // When true, this instance is in charge of coordinating periodic dumps. | 267 // When true, this instance is in charge of coordinating periodic dumps. |
249 bool is_coordinator_; | 268 bool is_coordinator_; |
250 | 269 |
251 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| | 270 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| |
252 // to guard against disabling logging while dumping on another thread. | 271 // to guard against disabling logging while dumping on another thread. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
296 } | 315 } |
297 | 316 |
298 private: | 317 private: |
299 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); | 318 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); |
300 }; | 319 }; |
301 | 320 |
302 } // namespace trace_event | 321 } // namespace trace_event |
303 } // namespace base | 322 } // namespace base |
304 | 323 |
305 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 324 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
OLD | NEW |