Chromium Code Reviews| 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 <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <set> | 12 #include <set> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "base/atomicops.h" | 15 #include "base/atomicops.h" |
| 16 #include "base/containers/hash_tables.h" | 16 #include "base/containers/hash_tables.h" |
| 17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "base/memory/ref_counted.h" | 18 #include "base/memory/ref_counted.h" |
| 19 #include "base/memory/singleton.h" | 19 #include "base/memory/singleton.h" |
| 20 #include "base/synchronization/lock.h" | 20 #include "base/synchronization/lock.h" |
| 21 #include "base/timer/timer.h" | |
| 22 #include "base/trace_event/memory_dump_request_args.h" | 21 #include "base/trace_event/memory_dump_request_args.h" |
| 23 #include "base/trace_event/process_memory_dump.h" | 22 #include "base/trace_event/process_memory_dump.h" |
| 24 #include "base/trace_event/trace_event.h" | 23 #include "base/trace_event/trace_event.h" |
| 25 | 24 |
| 26 namespace base { | 25 namespace base { |
| 27 | 26 |
| 28 class SingleThreadTaskRunner; | 27 class SingleThreadTaskRunner; |
| 29 class Thread; | 28 class Thread; |
| 30 | 29 |
| 31 namespace trace_event { | 30 namespace trace_event { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 // When set to true, calling |RegisterMemoryDumpProvider| is a no-op. | 138 // When set to true, calling |RegisterMemoryDumpProvider| is a no-op. |
| 140 void set_dumper_registrations_ignored_for_testing(bool ignored) { | 139 void set_dumper_registrations_ignored_for_testing(bool ignored) { |
| 141 dumper_registrations_ignored_for_testing_ = ignored; | 140 dumper_registrations_ignored_for_testing_ = ignored; |
| 142 } | 141 } |
| 143 | 142 |
| 144 private: | 143 private: |
| 145 friend std::default_delete<MemoryDumpManager>; // For the testing instance. | 144 friend std::default_delete<MemoryDumpManager>; // For the testing instance. |
| 146 friend struct DefaultSingletonTraits<MemoryDumpManager>; | 145 friend struct DefaultSingletonTraits<MemoryDumpManager>; |
| 147 friend class MemoryDumpManagerDelegate; | 146 friend class MemoryDumpManagerDelegate; |
| 148 friend class MemoryDumpManagerTest; | 147 friend class MemoryDumpManagerTest; |
| 148 class PeriodicGlobalDumpInvokeHelper; | |
|
Primiano Tucci (use gerrit)
2016/05/26 17:20:53
I think just PeriodicDumpHelper is enough (which a
ssid
2016/05/26 22:12:54
I think after including start and stop it is more
| |
| 149 | 149 |
| 150 // Descriptor used to hold information about registered MDPs. | 150 // Descriptor used to hold information about registered MDPs. |
| 151 // Some important considerations about lifetime of this object: | 151 // Some important considerations about lifetime of this object: |
| 152 // - In nominal conditions, all the MemoryDumpProviderInfo instances live in | 152 // - In nominal conditions, all the MemoryDumpProviderInfo instances live in |
| 153 // the |dump_providers_| collection (% unregistration while dumping). | 153 // the |dump_providers_| collection (% unregistration while dumping). |
| 154 // - Upon each dump they (actually their scoped_refptr-s) are copied into | 154 // - Upon each dump they (actually their scoped_refptr-s) are copied into |
| 155 // the ProcessMemoryDumpAsyncState. This is to allow removal (see below). | 155 // the ProcessMemoryDumpAsyncState. This is to allow removal (see below). |
| 156 // - When the MDP.OnMemoryDump() is invoked, the corresponding MDPInfo copy | 156 // - When the MDP.OnMemoryDump() is invoked, the corresponding MDPInfo copy |
| 157 // inside ProcessMemoryDumpAsyncState is removed. | 157 // inside ProcessMemoryDumpAsyncState is removed. |
| 158 // - In most cases, the MDPInfo is destroyed within UnregisterDumpProvider(). | 158 // - In most cases, the MDPInfo is destroyed within UnregisterDumpProvider(). |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 193 | 193 |
| 194 // The |options| arg passed to RegisterDumpProvider(). | 194 // The |options| arg passed to RegisterDumpProvider(). |
| 195 const MemoryDumpProvider::Options options; | 195 const MemoryDumpProvider::Options options; |
| 196 | 196 |
| 197 // For fail-safe logic (auto-disable failing MDPs). | 197 // For fail-safe logic (auto-disable failing MDPs). |
| 198 int consecutive_failures; | 198 int consecutive_failures; |
| 199 | 199 |
| 200 // Flagged either by the auto-disable logic or during unregistration. | 200 // Flagged either by the auto-disable logic or during unregistration. |
| 201 bool disabled; | 201 bool disabled; |
| 202 | 202 |
| 203 // True if the dump provider is not whitelited for background mode. | |
|
Primiano Tucci (use gerrit)
2016/05/26 17:20:53
nit: whitelisted
ssid
2016/05/26 22:12:54
Done.
| |
| 204 const bool disabled_for_background_mode; | |
|
Primiano Tucci (use gerrit)
2016/05/26 17:20:53
in order to make this less confusing (initially I
ssid
2016/05/26 22:12:54
Done thanks
| |
| 205 | |
| 203 private: | 206 private: |
| 204 friend class base::RefCountedThreadSafe<MemoryDumpProviderInfo>; | 207 friend class base::RefCountedThreadSafe<MemoryDumpProviderInfo>; |
| 205 ~MemoryDumpProviderInfo(); | 208 ~MemoryDumpProviderInfo(); |
| 206 | 209 |
| 207 DISALLOW_COPY_AND_ASSIGN(MemoryDumpProviderInfo); | 210 DISALLOW_COPY_AND_ASSIGN(MemoryDumpProviderInfo); |
| 208 }; | 211 }; |
| 209 | 212 |
| 210 // Holds the state of a process memory dump that needs to be carried over | 213 // Holds the state of a process memory dump that needs to be carried over |
| 211 // across task runners in order to fulfil an asynchronous CreateProcessDump() | 214 // across task runners in order to fulfil an asynchronous CreateProcessDump() |
| 212 // request. At any time exactly one task runner owns a | 215 // request. At any time exactly one task runner owns a |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 318 | 321 |
| 319 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| | 322 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| |
| 320 // to guard against disabling logging while dumping on another thread. | 323 // to guard against disabling logging while dumping on another thread. |
| 321 Lock lock_; | 324 Lock lock_; |
| 322 | 325 |
| 323 // Optimization to avoid attempting any memory dump (i.e. to not walk an empty | 326 // Optimization to avoid attempting any memory dump (i.e. to not walk an empty |
| 324 // dump_providers_enabled_ list) when tracing is not enabled. | 327 // dump_providers_enabled_ list) when tracing is not enabled. |
| 325 subtle::AtomicWord memory_tracing_enabled_; | 328 subtle::AtomicWord memory_tracing_enabled_; |
| 326 | 329 |
| 327 // For time-triggered periodic dumps. | 330 // For time-triggered periodic dumps. |
| 328 RepeatingTimer periodic_dump_timer_; | 331 std::unique_ptr<PeriodicGlobalDumpInvokeHelper> periodic_dump_helper_; |
| 329 | 332 |
| 330 // Thread used for MemoryDumpProviders which don't specify a task runner | 333 // Thread used for MemoryDumpProviders which don't specify a task runner |
| 331 // affinity. | 334 // affinity. |
| 332 std::unique_ptr<Thread> dump_thread_; | 335 std::unique_ptr<Thread> dump_thread_; |
| 333 | 336 |
| 334 // The unique id of the child process. This is created only for tracing and is | 337 // The unique id of the child process. This is created only for tracing and is |
| 335 // expected to be valid only when tracing is enabled. | 338 // expected to be valid only when tracing is enabled. |
| 336 uint64_t tracing_process_id_; | 339 uint64_t tracing_process_id_; |
| 337 | 340 |
| 338 // When true, calling |RegisterMemoryDumpProvider| is a no-op. | 341 // When true, calling |RegisterMemoryDumpProvider| is a no-op. |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 365 } | 368 } |
| 366 | 369 |
| 367 private: | 370 private: |
| 368 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); | 371 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); |
| 369 }; | 372 }; |
| 370 | 373 |
| 371 } // namespace trace_event | 374 } // namespace trace_event |
| 372 } // namespace base | 375 } // namespace base |
| 373 | 376 |
| 374 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 377 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
| OLD | NEW |