• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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 // Functions for allocating and accessing thread local values via key.
6 
7 #ifndef GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_
8 #define GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_
9 
10 #if defined(_WIN32)
11 #include <windows.h>
12 #else
13 #include <pthread.h>
14 #endif
15 
16 namespace gpu {
17 
18 #if defined(_WIN32)
19 typedef DWORD ThreadLocalKey;
20 #else
21 typedef pthread_key_t ThreadLocalKey;
22 #endif
23 
ThreadLocalAlloc()24 inline ThreadLocalKey ThreadLocalAlloc() {
25 #if defined(_WIN32)
26   return TlsAlloc();
27 #else
28   ThreadLocalKey key;
29   pthread_key_create(&key, NULL);
30   return key;
31 #endif
32 }
33 
ThreadLocalFree(ThreadLocalKey key)34 inline void ThreadLocalFree(ThreadLocalKey key) {
35 #if defined(_WIN32)
36   TlsFree(key);
37 #else
38   pthread_key_delete(key);
39 #endif
40 }
41 
ThreadLocalSetValue(ThreadLocalKey key,void * value)42 inline void ThreadLocalSetValue(ThreadLocalKey key, void* value) {
43 #if defined(_WIN32)
44   TlsSetValue(key, value);
45 #else
46   pthread_setspecific(key, value);
47 #endif
48 }
49 
ThreadLocalGetValue(ThreadLocalKey key)50 inline void* ThreadLocalGetValue(ThreadLocalKey key) {
51 #if defined(_WIN32)
52   return TlsGetValue(key);
53 #else
54   return pthread_getspecific(key);
55 #endif
56 }
57 }  // namespace gpu
58 
59 #endif  // GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_
60