Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: include/core/SkMutex.h

Issue 1368333004: Move Mutexy things to private. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gyp/tools.gyp ('k') | include/core/SkOnce.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/core/SkMutex.h
diff --git a/include/core/SkMutex.h b/include/core/SkMutex.h
deleted file mode 100644
index 77a00f02354074ab6b6635ffaba4d3b48746401d..0000000000000000000000000000000000000000
--- a/include/core/SkMutex.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkMutex_DEFINED
-#define SkMutex_DEFINED
-
-// This file is not part of the public Skia API.
-#include "../private/SkSemaphore.h"
-#include "SkTypes.h"
-
-#define SK_MUTEX_SEMAPHORE_INIT {1, {0}}
-
-#ifdef SK_DEBUG
- #define SK_BASE_MUTEX_INIT {SK_MUTEX_SEMAPHORE_INIT, 0}
-#else
- #define SK_BASE_MUTEX_INIT {SK_MUTEX_SEMAPHORE_INIT}
-#endif
-
-// Using POD-style initialization prevents the generation of a static initializer.
-//
-// Without magic statics there are no thread safety guarantees on initialization
-// of local statics (even POD). As a result, it is illegal to use
-// SK_DECLARE_STATIC_MUTEX in a function.
-//
-// Because SkBaseMutex is not a primitive, a static SkBaseMutex cannot be
-// initialized in a class with this macro.
-#define SK_DECLARE_STATIC_MUTEX(name) namespace {} static SkBaseMutex name = SK_BASE_MUTEX_INIT;
-
-// TODO(herb): unify this with the ThreadID in SkSharedMutex.cpp.
-#ifdef SK_DEBUG
- #ifdef SK_BUILD_FOR_WIN
- #include <windows.h>
- inline int64_t sk_get_thread_id() { return GetCurrentThreadId(); }
- #else
- #include <pthread.h>
- inline int64_t sk_get_thread_id() { return (int64_t)pthread_self(); }
- #endif
-#endif
-
-typedef int64_t SkThreadID;
-
-SkDEBUGCODE(static const SkThreadID kNoOwner = 0;)
-
-struct SkBaseMutex {
- void acquire() {
- fSemaphore.wait();
- SkDEBUGCODE(fOwner = sk_get_thread_id();)
- }
-
- void release() {
- this->assertHeld();
- SkDEBUGCODE(fOwner = kNoOwner;)
- fSemaphore.signal();
- }
-
- void assertHeld() {
- SkASSERT(fOwner == sk_get_thread_id());
- }
-
- SkBaseSemaphore fSemaphore;
- SkDEBUGCODE(SkThreadID fOwner;)
-};
-
-// This needs to use subclassing instead of encapsulation to make SkAutoMutexAcquire to work.
-class SkMutex : public SkBaseMutex {
-public:
- SkMutex () {
- fSemaphore = SK_MUTEX_SEMAPHORE_INIT;
- SkDEBUGCODE(fOwner = kNoOwner);
- }
- ~SkMutex () { fSemaphore.deleteSemaphore(); }
- SkMutex(const SkMutex&) = delete;
- SkMutex& operator=(const SkMutex&) = delete;
-};
-
-template <typename Lock>
-class SkAutoTAcquire : SkNoncopyable {
-public:
- explicit SkAutoTAcquire(Lock& mutex) : fMutex(&mutex) {
- SkASSERT(fMutex != NULL);
- mutex.acquire();
- }
-
- explicit SkAutoTAcquire(Lock* mutex) : fMutex(mutex) {
- if (mutex) {
- mutex->acquire();
- }
- }
-
- /** If the mutex has not been released, release it now. */
- ~SkAutoTAcquire() {
- if (fMutex) {
- fMutex->release();
- }
- }
-
- /** If the mutex has not been released, release it now. */
- void release() {
- if (fMutex) {
- fMutex->release();
- fMutex = NULL;
- }
- }
-
- /** Assert that we're holding the mutex. */
- void assertHeld() {
- SkASSERT(fMutex);
- fMutex->assertHeld();
- }
-
-private:
- Lock* fMutex;
-};
-
-typedef SkAutoTAcquire<SkBaseMutex> SkAutoMutexAcquire;
-#define SkAutoMutexAcquire(...) SK_REQUIRE_LOCAL_VAR(SkAutoMutexAcquire)
-
-#endif//SkMutex_DEFINED
« no previous file with comments | « gyp/tools.gyp ('k') | include/core/SkOnce.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698