diff options
author | dsinclair@chromium.org <dsinclair@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-25 20:41:19 +0000 |
---|---|---|
committer | dsinclair@chromium.org <dsinclair@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-25 20:41:19 +0000 |
commit | 7d342e882772e35c4e60e640f3501a84fd0a5bec (patch) | |
tree | cb86e79488437edcd41452488555cace9a628ca4 /base/threading/thread_id_name_manager_unittest.cc | |
parent | 02fd1dc91b2a4741356ed3a9694fcf977f6beda6 (diff) | |
download | chromium_src-7d342e882772e35c4e60e640f3501a84fd0a5bec.zip chromium_src-7d342e882772e35c4e60e640f3501a84fd0a5bec.tar.gz chromium_src-7d342e882772e35c4e60e640f3501a84fd0a5bec.tar.bz2 |
Add ability to retrieve a thread_name given a thread_id.
The work to add GPU tracing needs the ability to map from a thread_id back
to a thread_name in order to allow us to have the correct display on the
chrome://tracing page.
We want to be able to output our traces without having to post to a thread
to handle the output, and to have the GPU traces differentiated from the
GPU-process which will be doing the tracing calls.
BUG=111509
TEST=Added tests in base_unittests
Review URL: https://chromiumcodereview.appspot.com/11438022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178886 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/threading/thread_id_name_manager_unittest.cc')
-rw-r--r-- | base/threading/thread_id_name_manager_unittest.cc | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/base/threading/thread_id_name_manager_unittest.cc b/base/threading/thread_id_name_manager_unittest.cc new file mode 100644 index 0000000..08f1ea7 --- /dev/null +++ b/base/threading/thread_id_name_manager_unittest.cc @@ -0,0 +1,91 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/threading/thread_id_name_manager.h" + +#include "base/threading/platform_thread.h" +#include "base/threading/thread.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/platform_test.h" + +typedef PlatformTest ThreadIdNameManagerTest; + +namespace { + +static const char* kAThread = "a thread"; +static const char* kBThread = "b thread"; + +TEST_F(ThreadIdNameManagerTest, AddThreads) { + base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); + base::Thread thread_a(kAThread); + base::Thread thread_b(kBThread); + + thread_a.Start(); + thread_b.Start(); + + EXPECT_STREQ(kAThread, manager->GetName(thread_a.thread_id())); + EXPECT_STREQ(kBThread, manager->GetName(thread_b.thread_id())); + + thread_b.Stop(); + thread_a.Stop(); +} + +TEST_F(ThreadIdNameManagerTest, RemoveThreads) { + base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); + base::Thread thread_a(kAThread); + + thread_a.Start(); + { + base::Thread thread_b(kBThread); + thread_b.Start(); + thread_b.Stop(); + } + thread_a.Stop(); + + EXPECT_STREQ(kAThread, manager->GetName(thread_a.thread_id())); +} + +TEST_F(ThreadIdNameManagerTest, RestartThread) { + base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); + base::Thread thread_a(kAThread); + + thread_a.Start(); + base::PlatformThreadId a_id = thread_a.thread_id(); + thread_a.Stop(); + EXPECT_STREQ(kAThread, manager->GetName(a_id)); + + thread_a.Start(); + thread_a.Stop(); + EXPECT_STREQ(kAThread, manager->GetName(a_id)); +} + +TEST_F(ThreadIdNameManagerTest, ThreadNameInterning) { + base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); + + base::PlatformThreadId a_id = base::PlatformThread::CurrentId(); + base::PlatformThread::SetName("First Name"); + std::string version = manager->GetName(a_id); + + base::PlatformThread::SetName("New name"); + EXPECT_NE(version, manager->GetName(a_id)); + base::PlatformThread::SetName(""); +} + +TEST_F(ThreadIdNameManagerTest, ResettingNameKeepsCorrectInternedValue) { + base::ThreadIdNameManager* manager = base::ThreadIdNameManager::GetInstance(); + + base::PlatformThreadId a_id = base::PlatformThread::CurrentId(); + base::PlatformThread::SetName("Test Name"); + std::string version = manager->GetName(a_id); + + base::PlatformThread::SetName("New name"); + EXPECT_NE(version, manager->GetName(a_id)); + + base::PlatformThread::SetName("Test Name"); + EXPECT_EQ(version, manager->GetName(a_id)); + + base::PlatformThread::SetName(""); +} + +} // namespace |