Home | History | Annotate | Download | only in threading
      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 #ifndef BASE_THREADING_THREAD_ID_NAME_MANAGER_H_
      6 #define BASE_THREADING_THREAD_ID_NAME_MANAGER_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/base_export.h"
     12 #include "base/basictypes.h"
     13 #include "base/synchronization/lock.h"
     14 #include "base/threading/platform_thread.h"
     15 
     16 template <typename T> struct DefaultSingletonTraits;
     17 
     18 namespace base {
     19 
     20 class BASE_EXPORT ThreadIdNameManager {
     21  public:
     22   static ThreadIdNameManager* GetInstance();
     23 
     24   static const char* GetDefaultInternedString();
     25 
     26   // Register the mapping between a thread |id| and |handle|.
     27   void RegisterThread(PlatformThreadHandle::Handle handle, PlatformThreadId id);
     28 
     29   // Set the name for the given id.
     30   void SetName(PlatformThreadId id, const char* name);
     31 
     32   // Get the name for the given id.
     33   const char* GetName(PlatformThreadId id);
     34 
     35   // Remove the name for the given id.
     36   void RemoveName(PlatformThreadHandle::Handle handle, PlatformThreadId id);
     37 
     38  private:
     39   friend struct DefaultSingletonTraits<ThreadIdNameManager>;
     40 
     41   typedef std::map<PlatformThreadId, PlatformThreadHandle::Handle>
     42       ThreadIdToHandleMap;
     43   typedef std::map<PlatformThreadHandle::Handle, std::string*>
     44       ThreadHandleToInternedNameMap;
     45   typedef std::map<std::string, std::string*> NameToInternedNameMap;
     46 
     47   ThreadIdNameManager();
     48   ~ThreadIdNameManager();
     49 
     50   // lock_ protects the name_to_interned_name_, thread_id_to_handle_ and
     51   // thread_handle_to_interned_name_ maps.
     52   Lock lock_;
     53 
     54   NameToInternedNameMap name_to_interned_name_;
     55   ThreadIdToHandleMap thread_id_to_handle_;
     56   ThreadHandleToInternedNameMap thread_handle_to_interned_name_;
     57 
     58   // Treat the main process specially as there is no PlatformThreadHandle.
     59   std::string* main_process_name_;
     60   PlatformThreadId main_process_id_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(ThreadIdNameManager);
     63 };
     64 
     65 }  // namespace base
     66 
     67 #endif  // BASE_THREADING_THREAD_ID_NAME_MANAGER_H_
     68