12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef BASE_THREADING_THREAD_ID_NAME_MANAGER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define BASE_THREADING_THREAD_ID_NAME_MANAGER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/base_export.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/synchronization/lock.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/platform_thread.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <typename T> struct DefaultSingletonTraits; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BASE_EXPORT ThreadIdNameManager { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static ThreadIdNameManager* GetInstance(); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char* GetDefaultInternedString(); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Register the mapping between a thread |id| and |handle|. 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void RegisterThread(PlatformThreadHandle::Handle handle, PlatformThreadId id); 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the name for the given id. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetName(PlatformThreadId id, const char* name); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the name for the given id. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* GetName(PlatformThreadId id); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the name for the given id. 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void RemoveName(PlatformThreadHandle::Handle handle, PlatformThreadId id); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend struct DefaultSingletonTraits<ThreadIdNameManager>; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef std::map<PlatformThreadId, PlatformThreadHandle::Handle> 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ThreadIdToHandleMap; 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef std::map<PlatformThreadHandle::Handle, std::string*> 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ThreadHandleToInternedNameMap; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef std::map<std::string, std::string*> NameToInternedNameMap; 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ThreadIdNameManager(); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~ThreadIdNameManager(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // lock_ protects the name_to_interned_name_, thread_id_to_handle_ and 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // thread_handle_to_interned_name_ maps. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Lock lock_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NameToInternedNameMap name_to_interned_name_; 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ThreadIdToHandleMap thread_id_to_handle_; 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ThreadHandleToInternedNameMap thread_handle_to_interned_name_; 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Treat the main process specially as there is no PlatformThreadHandle. 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string* main_process_name_; 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PlatformThreadId main_process_id_; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ThreadIdNameManager); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace base 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // BASE_THREADING_THREAD_ID_NAME_MANAGER_H_ 68