Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(898)

Side by Side Diff: base/trace_event/memory_dump_manager.cc

Issue 2876543002: memory-infra: Don't invoke all dump providers in SUMMARY_ONLY mode (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/trace_event/memory_dump_manager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <inttypes.h> 7 #include <inttypes.h>
8 #include <stdio.h> 8 #include <stdio.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } 306 }
307 307
308 void MemoryDumpManager::RegisterDumpProviderInternal( 308 void MemoryDumpManager::RegisterDumpProviderInternal(
309 MemoryDumpProvider* mdp, 309 MemoryDumpProvider* mdp,
310 const char* name, 310 const char* name,
311 scoped_refptr<SequencedTaskRunner> task_runner, 311 scoped_refptr<SequencedTaskRunner> task_runner,
312 const MemoryDumpProvider::Options& options) { 312 const MemoryDumpProvider::Options& options) {
313 if (dumper_registrations_ignored_for_testing_) 313 if (dumper_registrations_ignored_for_testing_)
314 return; 314 return;
315 315
316 bool whitelisted_for_background_mode = IsMemoryDumpProviderWhitelisted(name); 316 bool whitelisted_for_background_mode = IsMemoryDumpProviderWhitelisted(name);
hjd 2017/05/10 13:48:08 Shall I rename all the methods/variables named thi
Primiano Tucci (use gerrit) 2017/05/10 16:18:58 up to you. I think is worth a comment, explaining
hjd 2017/05/15 12:02:27 Done.
317 scoped_refptr<MemoryDumpProviderInfo> mdpinfo = 317 bool whitelisted_for_summary_mode =
318 new MemoryDumpProviderInfo(mdp, name, std::move(task_runner), options, 318 IsMemoryDumpProviderWhitelistedForSummary(name);
319 whitelisted_for_background_mode); 319
320 scoped_refptr<MemoryDumpProviderInfo> mdpinfo = new MemoryDumpProviderInfo(
321 mdp, name, std::move(task_runner), options,
322 whitelisted_for_background_mode, whitelisted_for_summary_mode);
320 323
321 if (options.is_fast_polling_supported) { 324 if (options.is_fast_polling_supported) {
322 DCHECK(!mdpinfo->task_runner) << "MemoryDumpProviders capable of fast " 325 DCHECK(!mdpinfo->task_runner) << "MemoryDumpProviders capable of fast "
323 "polling must NOT be thread bound."; 326 "polling must NOT be thread bound.";
324 } 327 }
325 328
326 { 329 {
327 AutoLock lock(lock_); 330 AutoLock lock(lock_);
328 bool already_registered = !dump_providers_.insert(mdpinfo).second; 331 bool already_registered = !dump_providers_.insert(mdpinfo).second;
329 // This actually happens in some tests which don't have a clean tear-down 332 // This actually happens in some tests which don't have a clean tear-down
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 552
550 // If we are in background tracing, we should invoke only the whitelisted 553 // If we are in background tracing, we should invoke only the whitelisted
551 // providers. Ignore other providers and continue. 554 // providers. Ignore other providers and continue.
552 if (pmd_async_state->req_args.level_of_detail == 555 if (pmd_async_state->req_args.level_of_detail ==
553 MemoryDumpLevelOfDetail::BACKGROUND && 556 MemoryDumpLevelOfDetail::BACKGROUND &&
554 !mdpinfo->whitelisted_for_background_mode) { 557 !mdpinfo->whitelisted_for_background_mode) {
555 pmd_async_state->pending_dump_providers.pop_back(); 558 pmd_async_state->pending_dump_providers.pop_back();
556 return SetupNextMemoryDump(std::move(pmd_async_state)); 559 return SetupNextMemoryDump(std::move(pmd_async_state));
557 } 560 }
558 561
562 // If we are in summary mode, we only need to invoke the providers
563 // whitelisted for summary mode.
564 if (pmd_async_state->req_args.dump_type == MemoryDumpType::SUMMARY_ONLY &&
565 !mdpinfo->whitelisted_for_summary_mode) {
566 pmd_async_state->pending_dump_providers.pop_back();
567 return SetupNextMemoryDump(std::move(pmd_async_state));
568 }
569
559 // If the dump provider did not specify a task runner affinity, dump on 570 // If the dump provider did not specify a task runner affinity, dump on
560 // |dump_thread_|. 571 // |dump_thread_|.
561 SequencedTaskRunner* task_runner = mdpinfo->task_runner.get(); 572 SequencedTaskRunner* task_runner = mdpinfo->task_runner.get();
562 if (!task_runner) { 573 if (!task_runner) {
563 DCHECK(mdpinfo->options.dumps_on_single_thread_task_runner); 574 DCHECK(mdpinfo->options.dumps_on_single_thread_task_runner);
564 task_runner = pmd_async_state->dump_thread_task_runner.get(); 575 task_runner = pmd_async_state->dump_thread_task_runner.get();
565 DCHECK(task_runner); 576 DCHECK(task_runner);
566 } 577 }
567 578
568 if (mdpinfo->options.dumps_on_single_thread_task_runner && 579 if (mdpinfo->options.dumps_on_single_thread_task_runner &&
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 if (iter == process_dumps.end()) { 891 if (iter == process_dumps.end()) {
881 std::unique_ptr<ProcessMemoryDump> new_pmd( 892 std::unique_ptr<ProcessMemoryDump> new_pmd(
882 new ProcessMemoryDump(heap_profiler_serialization_state, dump_args)); 893 new ProcessMemoryDump(heap_profiler_serialization_state, dump_args));
883 iter = process_dumps.insert(std::make_pair(pid, std::move(new_pmd))).first; 894 iter = process_dumps.insert(std::make_pair(pid, std::move(new_pmd))).first;
884 } 895 }
885 return iter->second.get(); 896 return iter->second.get();
886 } 897 }
887 898
888 } // namespace trace_event 899 } // namespace trace_event
889 } // namespace base 900 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | base/trace_event/memory_dump_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698