• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2006 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #ifndef SkThread_DEFINED
11 #define SkThread_DEFINED
12 
13 #include "SkTypes.h"
14 #include "SkThread_platform.h"
15 
16 /****** SkThread_platform needs to define the following...
17 
18 int32_t sk_atomic_inc(int32_t*);
19 int32_t sk_atomic_add(int32_t*, int32_t);
20 int32_t sk_atomic_dec(int32_t*);
21 int32_t sk_atomic_conditional_inc(int32_t*);
22 
23 class SkMutex {
24 public:
25     SkMutex();
26     ~SkMutex();
27 
28     void    acquire();
29     void    release();
30 };
31 
32 ****************/
33 
34 class SkAutoMutexAcquire : SkNoncopyable {
35 public:
SkAutoMutexAcquire(SkBaseMutex & mutex)36     explicit SkAutoMutexAcquire(SkBaseMutex& mutex) : fMutex(&mutex) {
37         SkASSERT(fMutex != NULL);
38         mutex.acquire();
39     }
40 
SkAutoMutexAcquire(SkBaseMutex * mutex)41     SkAutoMutexAcquire(SkBaseMutex* mutex) : fMutex(mutex) {
42         if (mutex) {
43             mutex->acquire();
44         }
45     }
46 
47     /** If the mutex has not been release, release it now.
48     */
~SkAutoMutexAcquire()49     ~SkAutoMutexAcquire() {
50         if (fMutex) {
51             fMutex->release();
52         }
53     }
54 
55     /** If the mutex has not been release, release it now.
56     */
release()57     void release() {
58         if (fMutex) {
59             fMutex->release();
60             fMutex = NULL;
61         }
62     }
63 
64 private:
65     SkBaseMutex* fMutex;
66 };
67 #define SkAutoMutexAcquire(...) SK_REQUIRE_LOCAL_VAR(SkAutoMutexAcquire)
68 
69 #endif
70