| // Copyright (c) 2010 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. | |
| // Functions for allocating and accessing thread local values via key. | |
| #ifndef GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_ | |
| #define GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_ | |
| #if defined(_WIN32) | |
| #include <windows.h> | |
| #else | |
| #include <pthread.h> | |
| #endif | |
| namespace gpu { | |
| #if defined(_WIN32) | |
| typedef DWORD ThreadLocalKey; | |
| #else | |
| typedef pthread_key_t ThreadLocalKey; | |
| #endif | |
| inline ThreadLocalKey ThreadLocalAlloc() { | |
| #if defined(_WIN32) | |
| return TlsAlloc(); | |
| #else | |
| ThreadLocalKey key; | |
| pthread_key_create(&key, nullptr); | |
| return key; | |
| #endif | |
| } | |
| inline void ThreadLocalFree(ThreadLocalKey key) { | |
| #if defined(_WIN32) | |
| TlsFree(key); | |
| #else | |
| pthread_key_delete(key); | |
| #endif | |
| } | |
| inline void ThreadLocalSetValue(ThreadLocalKey key, void* value) { | |
| #if defined(_WIN32) | |
| TlsSetValue(key, value); | |
| #else | |
| pthread_setspecific(key, value); | |
| #endif | |
| } | |
| inline void* ThreadLocalGetValue(ThreadLocalKey key) { | |
| #if defined(_WIN32) | |
| return TlsGetValue(key); | |
| #else | |
| return pthread_getspecific(key); | |
| #endif | |
| } | |
| } // namespace gpu | |
| #endif // GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_ |