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 "base/threading/platform_thread.h" 8 #include "base/threading/thread.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/platform_test.h" 11 12 typedef PlatformTest ThreadIdNameManagerTest; 13 14 namespace { 15 16 static const char* kAThread = "a thread"; 17 static const char* kBThread = "b thread"; 18 19 TEST_F(ThreadIdNameManagerTest, AddThreads) { 20 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 21 base::Thread thread_a(kAThread); 22 base::Thread thread_b(kBThread); 23 24 thread_a.Start(); 25 thread_b.Start(); 26 27 EXPECT_STREQ(kAThread, manager->GetName(thread_a.thread_id())); 28 EXPECT_STREQ(kBThread, manager->GetName(thread_b.thread_id())); 29 30 thread_b.Stop(); 31 thread_a.Stop(); 32 } 33 34 TEST_F(ThreadIdNameManagerTest, RemoveThreads) { 35 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 36 base::Thread thread_a(kAThread); 37 38 thread_a.Start(); 39 { 40 base::Thread thread_b(kBThread); 41 thread_b.Start(); 42 thread_b.Stop(); 43 } 44 EXPECT_STREQ(kAThread, manager->GetName(thread_a.thread_id())); 45 46 thread_a.Stop(); 47 EXPECT_STREQ("", manager->GetName(thread_a.thread_id())); 48 } 49 50 TEST_F(ThreadIdNameManagerTest, RestartThread) { 51 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 52 base::Thread thread_a(kAThread); 53 54 thread_a.Start(); 55 base::PlatformThreadId a_id = thread_a.thread_id(); 56 EXPECT_STREQ(kAThread, manager->GetName(a_id)); 57 thread_a.Stop(); 58 59 thread_a.Start(); 60 EXPECT_STREQ("", manager->GetName(a_id)); 61 EXPECT_STREQ(kAThread, manager->GetName(thread_a.thread_id())); 62 thread_a.Stop(); 63 } 64 65 TEST_F(ThreadIdNameManagerTest, ThreadNameInterning) { 66 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 67 68 base::PlatformThreadId a_id = base::PlatformThread::CurrentId(); 69 base::PlatformThread::SetName("First Name"); 70 std::string version = manager->GetName(a_id); 71 72 base::PlatformThread::SetName("New name"); 73 EXPECT_NE(version, manager->GetName(a_id)); 74 base::PlatformThread::SetName(""); 75 } 76 77 TEST_F(ThreadIdNameManagerTest, ResettingNameKeepsCorrectInternedValue) { 78 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 79 80 base::PlatformThreadId a_id = base::PlatformThread::CurrentId(); 81 base::PlatformThread::SetName("Test Name"); 82 std::string version = manager->GetName(a_id); 83 84 base::PlatformThread::SetName("New name"); 85 EXPECT_NE(version, manager->GetName(a_id)); 86 87 base::PlatformThread::SetName("Test Name"); 88 EXPECT_EQ(version, manager->GetName(a_id)); 89 90 base::PlatformThread::SetName(""); 91 } 92 93 } // namespace 94