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 #include "base/trace_event/memory_dump_manager.h" | 5 #include "base/trace_event/memory_dump_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/atomic_sequence_num.h" | 10 #include "base/atomic_sequence_num.h" |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 MemoryDumpType dump_type, | 381 MemoryDumpType dump_type, |
382 MemoryDumpLevelOfDetail level_of_detail) { | 382 MemoryDumpLevelOfDetail level_of_detail) { |
383 RequestGlobalDump(dump_type, level_of_detail, MemoryDumpCallback()); | 383 RequestGlobalDump(dump_type, level_of_detail, MemoryDumpCallback()); |
384 } | 384 } |
385 | 385 |
386 void MemoryDumpManager::CreateProcessDump(const MemoryDumpRequestArgs& args, | 386 void MemoryDumpManager::CreateProcessDump(const MemoryDumpRequestArgs& args, |
387 const MemoryDumpCallback& callback) { | 387 const MemoryDumpCallback& callback) { |
388 TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(kTraceCategory, "ProcessMemoryDump", | 388 TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(kTraceCategory, "ProcessMemoryDump", |
389 TRACE_ID_MANGLE(args.dump_guid)); | 389 TRACE_ID_MANGLE(args.dump_guid)); |
390 | 390 |
| 391 // If argument filter is enabled then only background mode dumps should be |
| 392 // allowed. In case the trace config passed for background tracing session |
| 393 // missed the allowed modes argument, it crashes here instead of creating |
| 394 // unexpected dumps. |
| 395 if (TraceLog::GetInstance() |
| 396 ->GetCurrentTraceConfig() |
| 397 .IsArgumentFilterEnabled()) { |
| 398 CHECK_EQ(MemoryDumpLevelOfDetail::BACKGROUND, args.level_of_detail); |
| 399 } |
| 400 |
391 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state; | 401 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state; |
392 { | 402 { |
393 AutoLock lock(lock_); | 403 AutoLock lock(lock_); |
394 | 404 |
395 // |dump_thread_| can be nullptr is tracing was disabled before reaching | 405 // |dump_thread_| can be nullptr is tracing was disabled before reaching |
396 // here. SetupNextMemoryDump() is robust enough to tolerate it and will | 406 // here. SetupNextMemoryDump() is robust enough to tolerate it and will |
397 // NACK the dump. | 407 // NACK the dump. |
398 pmd_async_state.reset(new ProcessMemoryDumpAsyncState( | 408 pmd_async_state.reset(new ProcessMemoryDumpAsyncState( |
399 args, dump_providers_, session_state_, callback, | 409 args, dump_providers_, session_state_, callback, |
400 dump_thread_ ? dump_thread_->task_runner() : nullptr)); | 410 dump_thread_ ? dump_thread_->task_runner() : nullptr)); |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 if (heavy_dump_rate_ > 0 && periodic_dumps_count_ % heavy_dump_rate_ == 0) | 874 if (heavy_dump_rate_ > 0 && periodic_dumps_count_ % heavy_dump_rate_ == 0) |
865 level_of_detail = MemoryDumpLevelOfDetail::DETAILED; | 875 level_of_detail = MemoryDumpLevelOfDetail::DETAILED; |
866 ++periodic_dumps_count_; | 876 ++periodic_dumps_count_; |
867 | 877 |
868 MemoryDumpManager::GetInstance()->RequestGlobalDump( | 878 MemoryDumpManager::GetInstance()->RequestGlobalDump( |
869 MemoryDumpType::PERIODIC_INTERVAL, level_of_detail); | 879 MemoryDumpType::PERIODIC_INTERVAL, level_of_detail); |
870 } | 880 } |
871 | 881 |
872 } // namespace trace_event | 882 } // namespace trace_event |
873 } // namespace base | 883 } // namespace base |
OLD | NEW |