Index: src/ports/SkMutex_win.h |
=================================================================== |
--- src/ports/SkMutex_win.h (revision 0) |
+++ src/ports/SkMutex_win.h (working copy) |
@@ -0,0 +1,45 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef SkMutex_win_DEFINED |
+#define SkMutex_win_DEFINED |
+ |
+/** Windows CriticalSection based mutex. */ |
+ |
+#include "SkTypes.h" |
+ |
+// On Windows, SkBaseMutex and SkMutex are the same thing, |
+// we can't easily get rid of static initializers. |
+class SkMutex : SkNoncopyable { |
+public: |
+ SkMutex() { |
+ InitializeCriticalSection(&fStorage); |
+ } |
+ |
+ ~SkMutex() { |
+ DeleteCriticalSection(&fStorage); |
+ } |
+ |
+ void acquire() { |
+ EnterCriticalSection(&fStorage); |
+ } |
+ |
+ void release() { |
+ LeaveCriticalSection(&fStorage); |
+ } |
+ |
+private: |
+ CRITICAL_SECTION fStorage; |
+}; |
+ |
+typedef SkMutex SkBaseMutex; |
+ |
+// Windows currently provides no documented means of POD initializing a CRITICAL_SECTION. |
+#define SK_DECLARE_STATIC_MUTEX(name) static SkBaseMutex name |
+#define SK_DECLARE_GLOBAL_MUTEX(name) SkBaseMutex name |
+ |
+#endif |