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 scoped_refptr<SequencedTaskRunner> task_runner, | 87 scoped_refptr<SequencedTaskRunner> task_runner, |
88 MemoryDumpProvider::Options options); | 88 MemoryDumpProvider::Options options); |
89 void UnregisterDumpProvider(MemoryDumpProvider* mdp); | 89 void UnregisterDumpProvider(MemoryDumpProvider* mdp); |
90 | 90 |
91 // Unregisters an unbound dump provider and takes care about its deletion | 91 // Unregisters an unbound dump provider and takes care about its deletion |
92 // asynchronously. Can be used only for for dump providers with no | 92 // asynchronously. Can be used only for for dump providers with no |
93 // task-runner affinity. | 93 // task-runner affinity. |
94 // This method takes ownership of the dump provider and guarantees that: | 94 // This method takes ownership of the dump provider and guarantees that: |
95 // - The |mdp| will be deleted at some point in the near future. | 95 // - The |mdp| will be deleted at some point in the near future. |
96 // - Its deletion will not happen concurrently with the OnMemoryDump() call. | 96 // - Its deletion will not happen concurrently with the OnMemoryDump() call. |
97 // Note that OnMemoryDump() calls can still happen after this method returns. | 97 // Note that OnMemoryDump() and PollFastMemoryTotal() calls can still happen |
| 98 // after this method returns. |
98 void UnregisterAndDeleteDumpProviderSoon( | 99 void UnregisterAndDeleteDumpProviderSoon( |
99 std::unique_ptr<MemoryDumpProvider> mdp); | 100 std::unique_ptr<MemoryDumpProvider> mdp); |
100 | 101 |
101 // Requests a memory dump. The dump might happen or not depending on the | 102 // Requests a memory dump. The dump might happen or not depending on the |
102 // filters and categories specified when enabling tracing. | 103 // filters and categories specified when enabling tracing. |
103 // The optional |callback| is executed asynchronously, on an arbitrary thread, | 104 // The optional |callback| is executed asynchronously, on an arbitrary thread, |
104 // to notify about the completion of the global dump (i.e. after all the | 105 // to notify about the completion of the global dump (i.e. after all the |
105 // processes have dumped) and its success (true iff all the dumps were | 106 // processes have dumped) and its success (true iff all the dumps were |
106 // successful). | 107 // successful). |
107 void RequestGlobalDump(MemoryDumpType dump_type, | 108 void RequestGlobalDump(MemoryDumpType dump_type, |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 // the MDP while registration. On failure to do so, skips and continues to | 323 // the MDP while registration. On failure to do so, skips and continues to |
323 // next MDP. | 324 // next MDP. |
324 void SetupNextMemoryDump( | 325 void SetupNextMemoryDump( |
325 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); | 326 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); |
326 | 327 |
327 // Invokes OnMemoryDump() of the next MDP and calls SetupNextMemoryDump() at | 328 // Invokes OnMemoryDump() of the next MDP and calls SetupNextMemoryDump() at |
328 // the end to continue the ProcessMemoryDump. Should be called on the MDP task | 329 // the end to continue the ProcessMemoryDump. Should be called on the MDP task |
329 // runner. | 330 // runner. |
330 void InvokeOnMemoryDump(ProcessMemoryDumpAsyncState* owned_pmd_async_state); | 331 void InvokeOnMemoryDump(ProcessMemoryDumpAsyncState* owned_pmd_async_state); |
331 | 332 |
| 333 // Records a quick total memory usage in |memory_total|. This is used to track |
| 334 // and detect peaks in the memory usage of the process without having to |
| 335 // record all data from dump providers. This value is approximate to trade-off |
| 336 // speed, and not consistent with the rest of the memory-infra metrics. Must |
| 337 // be called on the dump thread. |
| 338 void PollFastMemoryTotal(uint64_t* memory_total); |
| 339 |
332 // Helper for RegierDumpProvider* functions. | 340 // Helper for RegierDumpProvider* functions. |
333 void RegisterDumpProviderInternal( | 341 void RegisterDumpProviderInternal( |
334 MemoryDumpProvider* mdp, | 342 MemoryDumpProvider* mdp, |
335 const char* name, | 343 const char* name, |
336 scoped_refptr<SequencedTaskRunner> task_runner, | 344 scoped_refptr<SequencedTaskRunner> task_runner, |
337 const MemoryDumpProvider::Options& options); | 345 const MemoryDumpProvider::Options& options); |
338 | 346 |
339 // Helper for the public UnregisterDumpProvider* functions. | 347 // Helper for the public UnregisterDumpProvider* functions. |
340 void UnregisterDumpProviderInternal(MemoryDumpProvider* mdp, | 348 void UnregisterDumpProviderInternal(MemoryDumpProvider* mdp, |
341 bool take_mdp_ownership_and_delete_async); | 349 bool take_mdp_ownership_and_delete_async); |
342 | 350 |
| 351 // Adds / removes provider that supports polling to |
| 352 // |dump_providers_for_polling_|. |
| 353 void RegisterPollingMDPOnDumpThread( |
| 354 scoped_refptr<MemoryDumpProviderInfo> mdpinfo); |
| 355 void UnregisterPollingMDPOnDumpThread( |
| 356 scoped_refptr<MemoryDumpProviderInfo> mdpinfo); |
| 357 |
343 // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by task | 358 // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by task |
344 // runner affinity (MDPs belonging to the same task runners are adjacent). | 359 // runner affinity (MDPs belonging to the same task runners are adjacent). |
345 MemoryDumpProviderInfo::OrderedSet dump_providers_; | 360 MemoryDumpProviderInfo::OrderedSet dump_providers_; |
346 | 361 |
| 362 // A copy of mdpinfo list that support polling. It must be accessed only on |
| 363 // the dump thread if dump thread exists. |
| 364 MemoryDumpProviderInfo::OrderedSet dump_providers_for_polling_; |
| 365 |
347 // Shared among all the PMDs to keep state scoped to the tracing session. | 366 // Shared among all the PMDs to keep state scoped to the tracing session. |
348 scoped_refptr<MemoryDumpSessionState> session_state_; | 367 scoped_refptr<MemoryDumpSessionState> session_state_; |
349 | 368 |
350 MemoryDumpManagerDelegate* delegate_; // Not owned. | 369 MemoryDumpManagerDelegate* delegate_; // Not owned. |
351 | 370 |
352 // When true, this instance is in charge of coordinating periodic dumps. | 371 // When true, this instance is in charge of coordinating periodic dumps. |
353 bool is_coordinator_; | 372 bool is_coordinator_; |
354 | 373 |
355 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| | 374 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| |
356 // to guard against disabling logging while dumping on another thread. | 375 // to guard against disabling logging while dumping on another thread. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 } | 420 } |
402 | 421 |
403 private: | 422 private: |
404 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); | 423 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); |
405 }; | 424 }; |
406 | 425 |
407 } // namespace trace_event | 426 } // namespace trace_event |
408 } // namespace base | 427 } // namespace base |
409 | 428 |
410 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 429 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
OLD | NEW |