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

Side by Side Diff: base/threading/thread_id_name_manager.cc

Issue 11438022: Add ability to retrieve a thread_name given a thread_id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use an interned name instead of name version. Created 7 years, 11 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/threading/thread_id_name_manager.h"
6
7 #include <stdlib.h>
8 #include <string.h>
9
10 #include "base/logging.h"
11 #include "base/memory/singleton.h"
12 #include "base/string_util.h"
13
14 namespace base {
15
16 const base::InternedString kDefaultInternedString = 0;
17
18 ThreadIdNameManager::ThreadIdNameManager()
19 : current_interned_name_(1) {
20 }
21
22 ThreadIdNameManager::~ThreadIdNameManager() {
23 }
24
25 ThreadIdNameManager* ThreadIdNameManager::GetInstance() {
26 return Singleton<ThreadIdNameManager,
27 LeakySingletonTraits<ThreadIdNameManager> >::get();
28 }
29
30 void ThreadIdNameManager::SetNameForId(PlatformThreadId id, const char* name) {
31 std::string str_name(name);
32 {
33 base::AutoLock locked(lock_);
34
35 if (name_to_interned_name_.count(str_name)) {
36 id_to_interned_name_[id] = name_to_interned_name_[str_name];
37 return;
38 }
39
40 base::InternedString interned_id = current_interned_name_++;
41 id_to_interned_name_[id] = interned_id;
42 interned_name_to_name_[interned_id] = str_name;
43 name_to_interned_name_[str_name] = interned_id;
44 }
45 }
46
47 const char* ThreadIdNameManager::GetNameForId(PlatformThreadId id) {
48 return GetInternedStringValue(GetInternedName(id));
49 }
50
51 void ThreadIdNameManager::RemoveNameForId(PlatformThreadId id) {
52 if (id == base::kInvalidThreadId)
53 return;
54
55 {
56 base::AutoLock locked(lock_);
57 DCHECK(id_to_interned_name_.count(id));
58 id_to_interned_name_.erase(id);
59 }
60 }
61
62 base::InternedString ThreadIdNameManager::GetInternedName(PlatformThreadId id) {
63 if (id == base::kInvalidThreadId)
64 return base::kDefaultInternedString;
65
66 base::AutoLock locked(lock_);
67 if (!id_to_interned_name_.count(id))
68 return base::kDefaultInternedString;
69
70 return id_to_interned_name_[id];
71 }
72
73 const char* ThreadIdNameManager::GetInternedStringValue(
74 base::InternedString name) {
75 base::AutoLock locked(lock_);
76 if (!interned_name_to_name_.count(name))
77 return NULL;
78 return interned_name_to_name_[name].c_str();
79 }
80
81 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698