| #ifndef SkMutex_DEFINED |
| #define SkMutex_DEFINED |
| |
| // This file is not part of the public Skia API. |
| #include "SkTypes.h" |
| |
| #if defined(SK_BUILD_FOR_WIN) |
| #include "../ports/SkMutex_win.h" |
| #else |
| #include "../ports/SkMutex_pthread.h" |
| #endif |
| |
| class SkAutoMutexAcquire : SkNoncopyable { |
| public: |
| explicit SkAutoMutexAcquire(SkBaseMutex& mutex) : fMutex(&mutex) { |
| SkASSERT(fMutex != NULL); |
| mutex.acquire(); |
| } |
| |
| explicit SkAutoMutexAcquire(SkBaseMutex* mutex) : fMutex(mutex) { |
| if (mutex) { |
| mutex->acquire(); |
| } |
| } |
| |
| /** If the mutex has not been released, release it now. */ |
| ~SkAutoMutexAcquire() { |
| 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: |
| SkBaseMutex* fMutex; |
| }; |
| #define SkAutoMutexAcquire(...) SK_REQUIRE_LOCAL_VAR(SkAutoMutexAcquire) |
| |
| |
| #endif//SkMutex_DEFINED |