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

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

Issue 2791243002: Rewrite base::Bind into base::BindOnce on trivial cases in base (Closed)
Patch Set: Created 3 years, 8 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
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 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 // This actually happens in some tests which don't have a clean tear-down 334 // This actually happens in some tests which don't have a clean tear-down
335 // path for RenderThreadImpl::Init(). 335 // path for RenderThreadImpl::Init().
336 if (already_registered) 336 if (already_registered)
337 return; 337 return;
338 338
339 // The list of polling MDPs is populated OnTraceLogEnabled(). This code 339 // The list of polling MDPs is populated OnTraceLogEnabled(). This code
340 // deals with the case of a MDP capable of fast polling that is registered 340 // deals with the case of a MDP capable of fast polling that is registered
341 // after the OnTraceLogEnabled() 341 // after the OnTraceLogEnabled()
342 if (options.is_fast_polling_supported && dump_thread_) { 342 if (options.is_fast_polling_supported && dump_thread_) {
343 dump_thread_->task_runner()->PostTask( 343 dump_thread_->task_runner()->PostTask(
344 FROM_HERE, Bind(&MemoryDumpManager::RegisterPollingMDPOnDumpThread, 344 FROM_HERE,
345 Unretained(this), mdpinfo)); 345 BindOnce(&MemoryDumpManager::RegisterPollingMDPOnDumpThread,
346 Unretained(this), mdpinfo));
346 } 347 }
347 } 348 }
348 349
349 if (heap_profiling_enabled_) 350 if (heap_profiling_enabled_)
350 mdp->OnHeapProfilingEnabled(true); 351 mdp->OnHeapProfilingEnabled(true);
351 } 352 }
352 353
353 void MemoryDumpManager::UnregisterDumpProvider(MemoryDumpProvider* mdp) { 354 void MemoryDumpManager::UnregisterDumpProvider(MemoryDumpProvider* mdp) {
354 UnregisterDumpProviderInternal(mdp, false /* delete_async */); 355 UnregisterDumpProviderInternal(mdp, false /* delete_async */);
355 } 356 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 // unregistration will not race with OnMemoryDump() calls. 406 // unregistration will not race with OnMemoryDump() calls.
406 DCHECK((*mdp_iter)->task_runner && 407 DCHECK((*mdp_iter)->task_runner &&
407 (*mdp_iter)->task_runner->RunsTasksOnCurrentThread()) 408 (*mdp_iter)->task_runner->RunsTasksOnCurrentThread())
408 << "MemoryDumpProvider \"" << (*mdp_iter)->name << "\" attempted to " 409 << "MemoryDumpProvider \"" << (*mdp_iter)->name << "\" attempted to "
409 << "unregister itself in a racy way. Please file a crbug."; 410 << "unregister itself in a racy way. Please file a crbug.";
410 } 411 }
411 412
412 if ((*mdp_iter)->options.is_fast_polling_supported && dump_thread_) { 413 if ((*mdp_iter)->options.is_fast_polling_supported && dump_thread_) {
413 DCHECK(take_mdp_ownership_and_delete_async); 414 DCHECK(take_mdp_ownership_and_delete_async);
414 dump_thread_->task_runner()->PostTask( 415 dump_thread_->task_runner()->PostTask(
415 FROM_HERE, Bind(&MemoryDumpManager::UnregisterPollingMDPOnDumpThread, 416 FROM_HERE,
416 Unretained(this), *mdp_iter)); 417 BindOnce(&MemoryDumpManager::UnregisterPollingMDPOnDumpThread,
418 Unretained(this), *mdp_iter));
417 } 419 }
418 420
419 // The MDPInfo instance can still be referenced by the 421 // The MDPInfo instance can still be referenced by the
420 // |ProcessMemoryDumpAsyncState.pending_dump_providers|. For this reason 422 // |ProcessMemoryDumpAsyncState.pending_dump_providers|. For this reason
421 // the MDPInfo is flagged as disabled. It will cause InvokeOnMemoryDump() 423 // the MDPInfo is flagged as disabled. It will cause InvokeOnMemoryDump()
422 // to just skip it, without actually invoking the |mdp|, which might be 424 // to just skip it, without actually invoking the |mdp|, which might be
423 // destroyed by the caller soon after this method returns. 425 // destroyed by the caller soon after this method returns.
424 (*mdp_iter)->disabled = true; 426 (*mdp_iter)->disabled = true;
425 dump_providers_.erase(mdp_iter); 427 dump_providers_.erase(mdp_iter);
426 } 428 }
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 } 603 }
602 604
603 if (mdpinfo->options.dumps_on_single_thread_task_runner && 605 if (mdpinfo->options.dumps_on_single_thread_task_runner &&
604 task_runner->RunsTasksOnCurrentThread()) { 606 task_runner->RunsTasksOnCurrentThread()) {
605 // If |dumps_on_single_thread_task_runner| is true then no PostTask is 607 // If |dumps_on_single_thread_task_runner| is true then no PostTask is
606 // required if we are on the right thread. 608 // required if we are on the right thread.
607 return InvokeOnMemoryDump(pmd_async_state.release()); 609 return InvokeOnMemoryDump(pmd_async_state.release());
608 } 610 }
609 611
610 bool did_post_task = task_runner->PostTask( 612 bool did_post_task = task_runner->PostTask(
611 FROM_HERE, Bind(&MemoryDumpManager::InvokeOnMemoryDump, Unretained(this), 613 FROM_HERE, BindOnce(&MemoryDumpManager::InvokeOnMemoryDump,
612 Unretained(pmd_async_state.get()))); 614 Unretained(this), Unretained(pmd_async_state.get())));
613 615
614 if (did_post_task) { 616 if (did_post_task) {
615 // Ownership is tranferred to InvokeOnMemoryDump(). 617 // Ownership is tranferred to InvokeOnMemoryDump().
616 ignore_result(pmd_async_state.release()); 618 ignore_result(pmd_async_state.release());
617 return; 619 return;
618 } 620 }
619 621
620 // PostTask usually fails only if the process or thread is shut down. So, the 622 // PostTask usually fails only if the process or thread is shut down. So, the
621 // dump provider is disabled here. But, don't disable unbound dump providers. 623 // dump provider is disabled here. But, don't disable unbound dump providers.
622 // The utility thread is normally shutdown when disabling the trace and 624 // The utility thread is normally shutdown when disabling the trace and
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 // static 748 // static
747 void MemoryDumpManager::FinalizeDumpAndAddToTrace( 749 void MemoryDumpManager::FinalizeDumpAndAddToTrace(
748 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state) { 750 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state) {
749 HEAP_PROFILER_SCOPED_IGNORE; 751 HEAP_PROFILER_SCOPED_IGNORE;
750 DCHECK(pmd_async_state->pending_dump_providers.empty()); 752 DCHECK(pmd_async_state->pending_dump_providers.empty());
751 const uint64_t dump_guid = pmd_async_state->req_args.dump_guid; 753 const uint64_t dump_guid = pmd_async_state->req_args.dump_guid;
752 if (!pmd_async_state->callback_task_runner->BelongsToCurrentThread()) { 754 if (!pmd_async_state->callback_task_runner->BelongsToCurrentThread()) {
753 scoped_refptr<SingleThreadTaskRunner> callback_task_runner = 755 scoped_refptr<SingleThreadTaskRunner> callback_task_runner =
754 pmd_async_state->callback_task_runner; 756 pmd_async_state->callback_task_runner;
755 callback_task_runner->PostTask( 757 callback_task_runner->PostTask(
756 FROM_HERE, Bind(&MemoryDumpManager::FinalizeDumpAndAddToTrace, 758 FROM_HERE, BindOnce(&MemoryDumpManager::FinalizeDumpAndAddToTrace,
757 Passed(&pmd_async_state))); 759 Passed(&pmd_async_state)));
758 return; 760 return;
759 } 761 }
760 762
761 TRACE_EVENT0(kTraceCategory, "MemoryDumpManager::FinalizeDumpAndAddToTrace"); 763 TRACE_EVENT0(kTraceCategory, "MemoryDumpManager::FinalizeDumpAndAddToTrace");
762 764
763 // The results struct to fill. 765 // The results struct to fill.
764 // TODO(hjd): Transitional until we send the full PMD. See crbug.com/704203 766 // TODO(hjd): Transitional until we send the full PMD. See crbug.com/704203
765 MemoryDumpCallbackResult result; 767 MemoryDumpCallbackResult result;
766 768
767 for (const auto& kv : pmd_async_state->process_dumps) { 769 for (const auto& kv : pmd_async_state->process_dumps) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 if (iter == process_dumps.end()) { 984 if (iter == process_dumps.end()) {
983 std::unique_ptr<ProcessMemoryDump> new_pmd( 985 std::unique_ptr<ProcessMemoryDump> new_pmd(
984 new ProcessMemoryDump(session_state, dump_args)); 986 new ProcessMemoryDump(session_state, dump_args));
985 iter = process_dumps.insert(std::make_pair(pid, std::move(new_pmd))).first; 987 iter = process_dumps.insert(std::make_pair(pid, std::move(new_pmd))).first;
986 } 988 }
987 return iter->second.get(); 989 return iter->second.get();
988 } 990 }
989 991
990 } // namespace trace_event 992 } // namespace trace_event
991 } // namespace base 993 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698