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

Side by Side Diff: include/core/SkThread.h

Issue 19808007: Split atomic and mutex implementations and make inlinable. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Include all the files. Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1
2 /* 1 /*
3 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
4 * 3 *
5 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 5 * found in the LICENSE file.
7 */ 6 */
8 7
9
10 #ifndef SkThread_DEFINED 8 #ifndef SkThread_DEFINED
11 #define SkThread_DEFINED 9 #define SkThread_DEFINED
12 10
13 #include "SkTypes.h" 11 #include "SkTypes.h"
14 #include "SkThread_platform.h"
15 12
16 /****** SkThread_platform needs to define the following... 13 // SK_ATOMICS_PLATFORM_H must provide inline implementations for the following d eclarations.
17 14
18 int32_t sk_atomic_inc(int32_t*); 15 /** Atomically adds one to the int referenced by addr and returns the previous v alue.
19 int32_t sk_atomic_add(int32_t*, int32_t); 16 * No additional memory barrier is required; this must act as a compiler barrie r.
20 int32_t sk_atomic_dec(int32_t*); 17 */
21 int32_t sk_atomic_conditional_inc(int32_t*); 18 static int32_t sk_atomic_inc(int32_t* addr);
22 19
23 class SkMutex { 20 /** Atomically adds inc to the int referenced by addrand returns the previous va lue.
djsollen 2013/07/25 16:00:34 missing space in 'addrand'
bungeman-skia 2013/09/26 17:16:23 Done.
21 * No additional memory barrier is required; this must act as a compiler barrie r.
22 */
23 static int32_t sk_atomic_add(int32_t* addr, int32_t inc);
24
25 /** Atomically subtracts one from the int referenced by addr and returns the pre vious value.
26 * This must act as a release (SL/S) memory barrier and as a compiler barrier.
27 */
28 static int32_t sk_atomic_dec(int32_t* addr);
29
30 /** Atomically adds one to the int referenced by addr iff the referenced int was not 0
31 * and returns the previous value.
32 * No additional memory barrier is required; this must act as a compiler barrie r.
33 */
34 static int32_t sk_atomic_conditional_inc(int32_t* addr);
35
36 /** If sk_atomic_dec does not act as an acquire (L/SL) barrier,
37 * this must act as an acquire (L/SL) memory barrier and as a compiler barrier.
38 */
39 static void sk_membar_acquire__after_atomic_dec();
djsollen 2013/07/25 16:00:34 do we need these two membar_aquire* functions as i
bungeman-skia 2013/09/26 17:16:23 Correctness and documentation. Many (all?) lock-fr
40
41 /** If sk_atomic_conditional_inc does not act as an acquire (L/SL) barrier,
42 * this must act as an acquire (L/SL) memory barrier and as a compiler barrier.
43 */
44 static void sk_membar_acquire__after_atomic_conditional_inc();
45
46 #include SK_ATOMICS_PLATFORM_H
47
48
49 /** SK_MUTEX_PLATFORM_H must provide the following (or equivelent) declarations.
djsollen 2013/07/25 16:00:34 equivalent
bungeman-skia 2013/09/26 17:16:23 Done.
50
51 class SkBaseMutex {
52 public:
53 void acquire();
54 void release();
55 };
56
57 class SkMutex : SkBaseMutex {
24 public: 58 public:
25 SkMutex(); 59 SkMutex();
26 ~SkMutex(); 60 ~SkMutex();
27
28 void acquire();
29 void release();
30 }; 61 };
31 62
32 ****************/ 63 #define SK_DECLARE_STATIC_MUTEX(name) static SkBaseMutex name = ...
64 #define SK_DECLARE_GLOBAL_MUTEX(name) SkBaseMutex name = ...
65 */
66
67 #include SK_MUTEX_PLATFORM_H
68
33 69
34 class SkAutoMutexAcquire : SkNoncopyable { 70 class SkAutoMutexAcquire : SkNoncopyable {
35 public: 71 public:
36 explicit SkAutoMutexAcquire(SkBaseMutex& mutex) : fMutex(&mutex) { 72 explicit SkAutoMutexAcquire(SkBaseMutex& mutex) : fMutex(&mutex) {
37 SkASSERT(fMutex != NULL); 73 SkASSERT(fMutex != NULL);
38 mutex.acquire(); 74 mutex.acquire();
39 } 75 }
40 76
41 SkAutoMutexAcquire(SkBaseMutex* mutex) : fMutex(mutex) { 77 explicit SkAutoMutexAcquire(SkBaseMutex* mutex) : fMutex(mutex) {
42 if (mutex) { 78 if (mutex) {
43 mutex->acquire(); 79 mutex->acquire();
44 } 80 }
45 } 81 }
46 82
47 /** If the mutex has not been release, release it now. 83 /** If the mutex has not been released, release it now. */
48 */
49 ~SkAutoMutexAcquire() { 84 ~SkAutoMutexAcquire() {
50 if (fMutex) { 85 if (fMutex) {
51 fMutex->release(); 86 fMutex->release();
52 } 87 }
53 } 88 }
54 89
55 /** If the mutex has not been release, release it now. 90 /** If the mutex has not been released, release it now. */
56 */
57 void release() { 91 void release() {
58 if (fMutex) { 92 if (fMutex) {
59 fMutex->release(); 93 fMutex->release();
60 fMutex = NULL; 94 fMutex = NULL;
61 } 95 }
62 } 96 }
63 97
64 private: 98 private:
65 SkBaseMutex* fMutex; 99 SkBaseMutex* fMutex;
66 }; 100 };
67 101
68 #endif 102 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698