Chromium Code Reviews| Index: base/threading/thread_id_name_manager.cc |
| diff --git a/base/threading/thread_id_name_manager.cc b/base/threading/thread_id_name_manager.cc |
| index 56cfa273a87d72df8ed3163bed0348e1d09203dc..51a11ff039cfc7bac2de509c42dd27ba9a337017 100644 |
| --- a/base/threading/thread_id_name_manager.cc |
| +++ b/base/threading/thread_id_name_manager.cc |
| @@ -10,6 +10,7 @@ |
| #include "base/logging.h" |
| #include "base/memory/singleton.h" |
| #include "base/strings/string_util.h" |
| +#include "base/trace_event/heap_profiler_allocation_context_tracker.h" |
| namespace base { |
| namespace { |
| @@ -50,27 +51,34 @@ void ThreadIdNameManager::RegisterThread(PlatformThreadHandle::Handle handle, |
| void ThreadIdNameManager::SetName(PlatformThreadId id, |
| const std::string& name) { |
| - AutoLock locked(lock_); |
| - NameToInternedNameMap::iterator iter = name_to_interned_name_.find(name); |
| std::string* leaked_str = NULL; |
| - if (iter != name_to_interned_name_.end()) { |
| - leaked_str = iter->second; |
| - } else { |
| - leaked_str = new std::string(name); |
| - name_to_interned_name_[name] = leaked_str; |
| + { |
| + AutoLock locked(lock_); |
| + NameToInternedNameMap::iterator iter = name_to_interned_name_.find(name); |
| + if (iter != name_to_interned_name_.end()) { |
| + leaked_str = iter->second; |
| + } else { |
| + leaked_str = new std::string(name); |
| + name_to_interned_name_[name] = leaked_str; |
| + } |
| + |
| + ThreadIdToHandleMap::iterator id_to_handle_iter = |
| + thread_id_to_handle_.find(id); |
| + |
| + // The main thread of a process will not be created as a Thread object which |
| + // means there is no PlatformThreadHandler registered. |
| + if (id_to_handle_iter == thread_id_to_handle_.end()) { |
| + main_process_name_ = leaked_str; |
| + main_process_id_ = id; |
| + return; |
| + } |
| + thread_handle_to_interned_name_[id_to_handle_iter->second] = leaked_str; |
| } |
| - ThreadIdToHandleMap::iterator id_to_handle_iter = |
| - thread_id_to_handle_.find(id); |
| - |
| - // The main thread of a process will not be created as a Thread object which |
| - // means there is no PlatformThreadHandler registered. |
| - if (id_to_handle_iter == thread_id_to_handle_.end()) { |
| - main_process_name_ = leaked_str; |
| - main_process_id_ = id; |
| - return; |
| - } |
| - thread_handle_to_interned_name_[id_to_handle_iter->second] = leaked_str; |
| + // Add the leaked thread name to heap profiler context tracker. The name added |
|
petrcermak
2016/03/29 13:07:46
Shouldn't you also do this for the main thread?
ssid
2016/03/29 18:19:11
replied below.
|
| + // is valid for the lifetime of the process. |
| + trace_event::AllocationContextTracker::SetCurrentThreadName( |
|
danakj
2016/03/29 00:47:36
Why not call GetName() when you need the name?
ssid
2016/03/29 18:19:11
I cannot call GetName from AllocationTracker becau
danakj
2016/03/29 20:12:41
Sorry I'm not understanding this, but why is it a
Primiano Tucci (use gerrit)
2016/03/31 15:48:28
Yeah that was my initial proposal, unfortunately w
|
| + leaked_str->c_str()); |
| } |
| const char* ThreadIdNameManager::GetName(PlatformThreadId id) { |