aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/ports/SkMutex_win.h
diff options
context:
space:
mode:
authorGravatar herb <herb@google.com>2015-09-24 07:34:49 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-24 07:34:49 -0700
commit7f0a3d7523377097184309152f883f1fcb12a4b8 (patch)
treeb7f6d9ee1208ead229a40240d26d765dd446c2ae /include/ports/SkMutex_win.h
parentc6363ef7b4763b36a9a0d255bc775a973d2fc7a5 (diff)
Make mutex semaphore based.
This implementation improves performance of SkMutex acquire / release pair from 42ns -> 13 ns. SkSharedMutex and SkSpinlock have the same performance. It also removes specialized windows and linux/mac code. BUG=skia: Review URL: https://codereview.chromium.org/1359733002
Diffstat (limited to 'include/ports/SkMutex_win.h')
-rw-r--r--include/ports/SkMutex_win.h79
1 files changed, 0 insertions, 79 deletions
diff --git a/include/ports/SkMutex_win.h b/include/ports/SkMutex_win.h
deleted file mode 100644
index fe06336a90..0000000000
--- a/include/ports/SkMutex_win.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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. */
-
-#ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
-#endif
-#ifndef NOMINMAX
-# define NOMINMAX
-# define NOMINMAX_WAS_LOCALLY_DEFINED
-#endif
-#
-#include <windows.h>
-#
-#ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
-# undef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED
-# undef WIN32_LEAN_AND_MEAN
-#endif
-#ifdef NOMINMAX_WAS_LOCALLY_DEFINED
-# undef NOMINMAX_WAS_LOCALLY_DEFINED
-# undef NOMINMAX
-#endif
-
-// On Windows, SkBaseMutex and SkMutex are the same thing,
-// we can't easily get rid of static initializers. However,
-// we preserve the same inheritance pattern as other platforms
-// so that we can forward-declare cleanly.
-struct SkBaseMutex {
-public:
- SkBaseMutex() {
- InitializeCriticalSection(&fStorage);
- SkDEBUGCODE(fOwner = 0;)
- }
-
- ~SkBaseMutex() {
- SkASSERT(0 == fOwner);
- DeleteCriticalSection(&fStorage);
- }
-
- void acquire() {
- EnterCriticalSection(&fStorage);
- SkDEBUGCODE(fOwner = GetCurrentThreadId();)
- }
-
- void release() {
- this->assertHeld();
- SkDEBUGCODE(fOwner = 0;)
- LeaveCriticalSection(&fStorage);
- }
-
- void assertHeld() {
- SkASSERT(GetCurrentThreadId() == fOwner);
- }
-
-protected:
- CRITICAL_SECTION fStorage;
- SkDEBUGCODE(DWORD fOwner;)
-
-private:
- SkBaseMutex(const SkBaseMutex&);
- SkBaseMutex& operator=(const SkBaseMutex&);
-};
-
-class SkMutex : public SkBaseMutex { };
-
-// Windows currently provides no documented means of POD initializing a CRITICAL_SECTION.
-// As a result, it is illegal to SK_DECLARE_STATIC_MUTEX in a function.
-#define SK_DECLARE_STATIC_MUTEX(name) namespace{} static SkBaseMutex name
-
-#endif