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 12typedef PlatformTest ThreadIdNameManagerTest; 13 14namespace { 15 16const char kAThread[] = "a thread"; 17const char kBThread[] = "b thread"; 18 19TEST_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.StartAndWaitForTesting(); 25 thread_b.StartAndWaitForTesting(); 26 27 EXPECT_STREQ(kAThread, manager->GetName(thread_a.GetThreadId())); 28 EXPECT_STREQ(kBThread, manager->GetName(thread_b.GetThreadId())); 29 30 thread_b.Stop(); 31 thread_a.Stop(); 32} 33 34TEST_F(ThreadIdNameManagerTest, RemoveThreads) { 35 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 36 base::Thread thread_a(kAThread); 37 38 thread_a.StartAndWaitForTesting(); 39 { 40 base::Thread thread_b(kBThread); 41 thread_b.StartAndWaitForTesting(); 42 thread_b.Stop(); 43 } 44 EXPECT_STREQ(kAThread, manager->GetName(thread_a.GetThreadId())); 45 46 thread_a.Stop(); 47 EXPECT_STREQ("", manager->GetName(thread_a.GetThreadId())); 48} 49 50TEST_F(ThreadIdNameManagerTest, RestartThread) { 51 base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); 52 base::Thread thread_a(kAThread); 53 54 thread_a.StartAndWaitForTesting(); 55 base::PlatformThreadId a_id = thread_a.GetThreadId(); 56 EXPECT_STREQ(kAThread, manager->GetName(a_id)); 57 thread_a.Stop(); 58 59 thread_a.StartAndWaitForTesting(); 60 EXPECT_STREQ("", manager->GetName(a_id)); 61 EXPECT_STREQ(kAThread, manager->GetName(thread_a.GetThreadId())); 62 thread_a.Stop(); 63} 64 65TEST_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 77TEST_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