| 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> |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 MemoryDumpProvider::Options options); | 87 MemoryDumpProvider::Options options); |
| 88 void UnregisterDumpProvider(MemoryDumpProvider* mdp); | 88 void UnregisterDumpProvider(MemoryDumpProvider* mdp); |
| 89 | 89 |
| 90 // Unregisters an unbound dump provider and takes care about its deletion | 90 // Unregisters an unbound dump provider and takes care about its deletion |
| 91 // asynchronously. Can be used only for for dump providers with no | 91 // asynchronously. Can be used only for for dump providers with no |
| 92 // task-runner affinity. | 92 // task-runner affinity. |
| 93 // This method takes ownership of the dump provider and guarantees that: | 93 // This method takes ownership of the dump provider and guarantees that: |
| 94 // - The |mdp| will be deleted at some point in the near future. | 94 // - The |mdp| will be deleted at some point in the near future. |
| 95 // - Its deletion will not happen concurrently with the OnMemoryDump() call. | 95 // - Its deletion will not happen concurrently with the OnMemoryDump() call. |
| 96 // Note that OnMemoryDump() calls can still happen after this method returns. | 96 // Note that OnMemoryDump() calls can still happen after this method returns. |
| 97 void UnregisterAndDeleteDumpProviderSoon(scoped_ptr<MemoryDumpProvider> mdp); | 97 void UnregisterAndDeleteDumpProviderSoon( |
| 98 std::unique_ptr<MemoryDumpProvider> mdp); |
| 98 | 99 |
| 99 // Requests a memory dump. The dump might happen or not depending on the | 100 // Requests a memory dump. The dump might happen or not depending on the |
| 100 // filters and categories specified when enabling tracing. | 101 // filters and categories specified when enabling tracing. |
| 101 // The optional |callback| is executed asynchronously, on an arbitrary thread, | 102 // The optional |callback| is executed asynchronously, on an arbitrary thread, |
| 102 // to notify about the completion of the global dump (i.e. after all the | 103 // to notify about the completion of the global dump (i.e. after all the |
| 103 // processes have dumped) and its success (true iff all the dumps were | 104 // processes have dumped) and its success (true iff all the dumps were |
| 104 // successful). | 105 // successful). |
| 105 void RequestGlobalDump(MemoryDumpType dump_type, | 106 void RequestGlobalDump(MemoryDumpType dump_type, |
| 106 MemoryDumpLevelOfDetail level_of_detail, | 107 MemoryDumpLevelOfDetail level_of_detail, |
| 107 const MemoryDumpCallback& callback); | 108 const MemoryDumpCallback& callback); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 | 175 |
| 175 MemoryDumpProviderInfo(MemoryDumpProvider* dump_provider, | 176 MemoryDumpProviderInfo(MemoryDumpProvider* dump_provider, |
| 176 const char* name, | 177 const char* name, |
| 177 scoped_refptr<SequencedTaskRunner> task_runner, | 178 scoped_refptr<SequencedTaskRunner> task_runner, |
| 178 const MemoryDumpProvider::Options& options); | 179 const MemoryDumpProvider::Options& options); |
| 179 | 180 |
| 180 MemoryDumpProvider* const dump_provider; | 181 MemoryDumpProvider* const dump_provider; |
| 181 | 182 |
| 182 // Used to transfer ownership for UnregisterAndDeleteDumpProviderSoon(). | 183 // Used to transfer ownership for UnregisterAndDeleteDumpProviderSoon(). |
| 183 // nullptr in all other cases. | 184 // nullptr in all other cases. |
| 184 scoped_ptr<MemoryDumpProvider> owned_dump_provider; | 185 std::unique_ptr<MemoryDumpProvider> owned_dump_provider; |
| 185 | 186 |
| 186 // Human readable name, for debugging and testing. Not necessarily unique. | 187 // Human readable name, for debugging and testing. Not necessarily unique. |
| 187 const char* const name; | 188 const char* const name; |
| 188 | 189 |
| 189 // The task runner affinity. Can be nullptr, in which case the dump provider | 190 // The task runner affinity. Can be nullptr, in which case the dump provider |
| 190 // will be invoked on |dump_thread_|. | 191 // will be invoked on |dump_thread_|. |
| 191 const scoped_refptr<SequencedTaskRunner> task_runner; | 192 const scoped_refptr<SequencedTaskRunner> task_runner; |
| 192 | 193 |
| 193 // The |options| arg passed to RegisterDumpProvider(). | 194 // The |options| arg passed to RegisterDumpProvider(). |
| 194 const MemoryDumpProvider::Options options; | 195 const MemoryDumpProvider::Options options; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 219 scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner); | 220 scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner); |
| 220 ~ProcessMemoryDumpAsyncState(); | 221 ~ProcessMemoryDumpAsyncState(); |
| 221 | 222 |
| 222 // Gets or creates the memory dump container for the given target process. | 223 // Gets or creates the memory dump container for the given target process. |
| 223 ProcessMemoryDump* GetOrCreateMemoryDumpContainerForProcess(ProcessId pid); | 224 ProcessMemoryDump* GetOrCreateMemoryDumpContainerForProcess(ProcessId pid); |
| 224 | 225 |
| 225 // A map of ProcessId -> ProcessMemoryDump, one for each target process | 226 // A map of ProcessId -> ProcessMemoryDump, one for each target process |
| 226 // being dumped from the current process. Typically each process dumps only | 227 // being dumped from the current process. Typically each process dumps only |
| 227 // for itself, unless dump providers specify a different |target_process| in | 228 // for itself, unless dump providers specify a different |target_process| in |
| 228 // MemoryDumpProvider::Options. | 229 // MemoryDumpProvider::Options. |
| 229 std::map<ProcessId, scoped_ptr<ProcessMemoryDump>> process_dumps; | 230 std::map<ProcessId, std::unique_ptr<ProcessMemoryDump>> process_dumps; |
| 230 | 231 |
| 231 // The arguments passed to the initial CreateProcessDump() request. | 232 // The arguments passed to the initial CreateProcessDump() request. |
| 232 const MemoryDumpRequestArgs req_args; | 233 const MemoryDumpRequestArgs req_args; |
| 233 | 234 |
| 234 // An ordered sequence of dump providers that have to be invoked to complete | 235 // An ordered sequence of dump providers that have to be invoked to complete |
| 235 // the dump. This is a copy of |dump_providers_| at the beginning of a dump | 236 // the dump. This is a copy of |dump_providers_| at the beginning of a dump |
| 236 // and becomes empty at the end, when all dump providers have been invoked. | 237 // and becomes empty at the end, when all dump providers have been invoked. |
| 237 std::vector<scoped_refptr<MemoryDumpProviderInfo>> pending_dump_providers; | 238 std::vector<scoped_refptr<MemoryDumpProviderInfo>> pending_dump_providers; |
| 238 | 239 |
| 239 // The trace-global session state. | 240 // The trace-global session state. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 262 }; | 263 }; |
| 263 | 264 |
| 264 static const int kMaxConsecutiveFailuresCount; | 265 static const int kMaxConsecutiveFailuresCount; |
| 265 static const char* const kSystemAllocatorPoolName; | 266 static const char* const kSystemAllocatorPoolName; |
| 266 | 267 |
| 267 MemoryDumpManager(); | 268 MemoryDumpManager(); |
| 268 ~MemoryDumpManager() override; | 269 ~MemoryDumpManager() override; |
| 269 | 270 |
| 270 static void SetInstanceForTesting(MemoryDumpManager* instance); | 271 static void SetInstanceForTesting(MemoryDumpManager* instance); |
| 271 static void FinalizeDumpAndAddToTrace( | 272 static void FinalizeDumpAndAddToTrace( |
| 272 scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); | 273 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); |
| 273 | 274 |
| 274 // Enable heap profiling if kEnableHeapProfiling is specified. | 275 // Enable heap profiling if kEnableHeapProfiling is specified. |
| 275 void EnableHeapProfilingIfNeeded(); | 276 void EnableHeapProfilingIfNeeded(); |
| 276 | 277 |
| 277 // Internal, used only by MemoryDumpManagerDelegate. | 278 // Internal, used only by MemoryDumpManagerDelegate. |
| 278 // Creates a memory dump for the current process and appends it to the trace. | 279 // Creates a memory dump for the current process and appends it to the trace. |
| 279 // |callback| will be invoked asynchronously upon completion on the same | 280 // |callback| will be invoked asynchronously upon completion on the same |
| 280 // thread on which CreateProcessDump() was called. | 281 // thread on which CreateProcessDump() was called. |
| 281 void CreateProcessDump(const MemoryDumpRequestArgs& args, | 282 void CreateProcessDump(const MemoryDumpRequestArgs& args, |
| 282 const MemoryDumpCallback& callback); | 283 const MemoryDumpCallback& callback); |
| 283 | 284 |
| 284 // Calls InvokeOnMemoryDump() for the next MDP on the task runner specified by | 285 // Calls InvokeOnMemoryDump() for the next MDP on the task runner specified by |
| 285 // the MDP while registration. On failure to do so, skips and continues to | 286 // the MDP while registration. On failure to do so, skips and continues to |
| 286 // next MDP. | 287 // next MDP. |
| 287 void SetupNextMemoryDump( | 288 void SetupNextMemoryDump( |
| 288 scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); | 289 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); |
| 289 | 290 |
| 290 // Invokes OnMemoryDump() of the next MDP and calls SetupNextMemoryDump() at | 291 // Invokes OnMemoryDump() of the next MDP and calls SetupNextMemoryDump() at |
| 291 // the end to continue the ProcessMemoryDump. Should be called on the MDP task | 292 // the end to continue the ProcessMemoryDump. Should be called on the MDP task |
| 292 // runner. | 293 // runner. |
| 293 void InvokeOnMemoryDump(ProcessMemoryDumpAsyncState* owned_pmd_async_state); | 294 void InvokeOnMemoryDump(ProcessMemoryDumpAsyncState* owned_pmd_async_state); |
| 294 | 295 |
| 295 // Helper for RegierDumpProvider* functions. | 296 // Helper for RegierDumpProvider* functions. |
| 296 void RegisterDumpProviderInternal( | 297 void RegisterDumpProviderInternal( |
| 297 MemoryDumpProvider* mdp, | 298 MemoryDumpProvider* mdp, |
| 298 const char* name, | 299 const char* name, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 321 | 322 |
| 322 // Optimization to avoid attempting any memory dump (i.e. to not walk an empty | 323 // Optimization to avoid attempting any memory dump (i.e. to not walk an empty |
| 323 // dump_providers_enabled_ list) when tracing is not enabled. | 324 // dump_providers_enabled_ list) when tracing is not enabled. |
| 324 subtle::AtomicWord memory_tracing_enabled_; | 325 subtle::AtomicWord memory_tracing_enabled_; |
| 325 | 326 |
| 326 // For time-triggered periodic dumps. | 327 // For time-triggered periodic dumps. |
| 327 RepeatingTimer periodic_dump_timer_; | 328 RepeatingTimer periodic_dump_timer_; |
| 328 | 329 |
| 329 // Thread used for MemoryDumpProviders which don't specify a task runner | 330 // Thread used for MemoryDumpProviders which don't specify a task runner |
| 330 // affinity. | 331 // affinity. |
| 331 scoped_ptr<Thread> dump_thread_; | 332 std::unique_ptr<Thread> dump_thread_; |
| 332 | 333 |
| 333 // The unique id of the child process. This is created only for tracing and is | 334 // The unique id of the child process. This is created only for tracing and is |
| 334 // expected to be valid only when tracing is enabled. | 335 // expected to be valid only when tracing is enabled. |
| 335 uint64_t tracing_process_id_; | 336 uint64_t tracing_process_id_; |
| 336 | 337 |
| 337 // When true, calling |RegisterMemoryDumpProvider| is a no-op. | 338 // When true, calling |RegisterMemoryDumpProvider| is a no-op. |
| 338 bool dumper_registrations_ignored_for_testing_; | 339 bool dumper_registrations_ignored_for_testing_; |
| 339 | 340 |
| 340 // Whether new memory dump providers should be told to enable heap profiling. | 341 // Whether new memory dump providers should be told to enable heap profiling. |
| 341 bool heap_profiling_enabled_; | 342 bool heap_profiling_enabled_; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 364 } | 365 } |
| 365 | 366 |
| 366 private: | 367 private: |
| 367 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); | 368 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); |
| 368 }; | 369 }; |
| 369 | 370 |
| 370 } // namespace trace_event | 371 } // namespace trace_event |
| 371 } // namespace base | 372 } // namespace base |
| 372 | 373 |
| 373 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 374 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
| OLD | NEW |