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
16namespace gpu {
17
18#if defined(_WIN32)
19typedef DWORD ThreadLocalKey;
20#else
21typedef pthread_key_t ThreadLocalKey;
22#endif
23
24inline 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
34inline void ThreadLocalFree(ThreadLocalKey key) {
35#if defined(_WIN32)
36  TlsFree(key);
37#else
38  pthread_key_delete(key);
39#endif
40}
41
42inline 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
50inline 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