diff options
author | herb <herb@google.com> | 2015-09-24 07:34:49 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-24 07:34:49 -0700 |
commit | 7f0a3d7523377097184309152f883f1fcb12a4b8 (patch) | |
tree | b7f6d9ee1208ead229a40240d26d765dd446c2ae /include/ports/SkMutex_win.h | |
parent | c6363ef7b4763b36a9a0d255bc775a973d2fc7a5 (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.h | 79 |
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 |