gfx/skia/trunk/src/ports/SkMutex_win.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:a5c36590d6a5
1 /*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef SkMutex_win_DEFINED
9 #define SkMutex_win_DEFINED
10
11 /** Windows CriticalSection based mutex. */
12
13 #ifndef WIN32_LEAN_AND_MEAN
14 # define WIN32_LEAN_AND_MEAN
15 # define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
16 #endif
17 #ifndef NOMINMAX
18 # define NOMINMAX
19 # define NOMINMAX_WAS_LOCALLY_DEFINED
20 #endif
21 #
22 #include <windows.h>
23 #
24 #ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
25 # undef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
26 # undef WIN32_LEAN_AND_MEAN
27 #endif
28 #ifdef NOMINMAX_WAS_LOCALLY_DEFINED
29 # undef NOMINMAX_WAS_LOCALLY_DEFINED
30 # undef NOMINMAX
31 #endif
32
33 // On Windows, SkBaseMutex and SkMutex are the same thing,
34 // we can't easily get rid of static initializers.
35 class SkMutex {
36 public:
37 SkMutex() {
38 InitializeCriticalSection(&fStorage);
39 }
40
41 ~SkMutex() {
42 DeleteCriticalSection(&fStorage);
43 }
44
45 void acquire() {
46 EnterCriticalSection(&fStorage);
47 }
48
49 void release() {
50 LeaveCriticalSection(&fStorage);
51 }
52
53 private:
54 SkMutex(const SkMutex&);
55 SkMutex& operator=(const SkMutex&);
56
57 CRITICAL_SECTION fStorage;
58 };
59
60 typedef SkMutex SkBaseMutex;
61
62 // Windows currently provides no documented means of POD initializing a CRITICAL_SECTION.
63 #define SK_DECLARE_STATIC_MUTEX(name) static SkBaseMutex name
64 #define SK_DECLARE_GLOBAL_MUTEX(name) SkBaseMutex name
65
66 #endif

mercurial