OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "SkPixelRef.h" | 8 #include "SkPixelRef.h" |
9 #include "SkFlattenableBuffers.h" | 9 #include "SkFlattenableBuffers.h" |
10 #include "SkThread.h" | 10 #include "SkThread.h" |
11 | 11 |
12 SK_DEFINE_INST_COUNT(SkPixelRef) | 12 SK_DEFINE_INST_COUNT(SkPixelRef) |
13 | 13 |
14 // must be a power-of-2. undef to just use 1 mutex | |
15 #define PIXELREF_MUTEX_RING_COUNT 32 | |
16 | 14 |
17 #ifdef PIXELREF_MUTEX_RING_COUNT | 15 #ifdef SK_USE_POSIX_THREADS |
18 static int32_t gPixelRefMutexRingIndex; | 16 |
19 static SK_DECLARE_MUTEX_ARRAY(gPixelRefMutexRing, PIXELREF_MUTEX_RING_COUNT) ; | 17 static SkBaseMutex gPixelRefMutexRing[] = { |
20 #else | 18 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, |
bungeman-skia
2013/04/11 21:47:06
Since we always want this to be a power of two, wo
| |
21 SK_DECLARE_STATIC_MUTEX(gPixelRefMutex); | 19 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, |
20 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
21 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
22 | |
23 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
24 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
25 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
26 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
27 | |
28 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
29 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
30 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
31 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
32 | |
33 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
34 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
35 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
36 { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, | |
37 }; | |
38 | |
39 // must be a power-of-2. undef to just use 1 mutex | |
bungeman-skia
2013/04/11 21:47:06
SK_COMPILE_ASSERT the size if a power of 2?
Do th
| |
40 #define PIXELREF_MUTEX_RING_COUNT SK_ARRAY_COUNT(gPixelRefMutexRing) | |
41 | |
42 #else // not pthreads | |
43 | |
44 // must be a power-of-2. undef to just use 1 mutex | |
45 #define PIXELREF_MUTEX_RING_COUNT 32 | |
46 static SkBaseMutex gPixelRefMutexRing[PIXELREF_MUTEX_RING_COUNT]; | |
47 | |
22 #endif | 48 #endif |
23 | 49 |
24 static SkBaseMutex* get_default_mutex() { | 50 static SkBaseMutex* get_default_mutex() { |
25 #ifdef PIXELREF_MUTEX_RING_COUNT | 51 static int32_t gPixelRefMutexRingIndex; |
52 | |
26 // atomic_inc might be overkill here. It may be fine if once in a while | 53 // atomic_inc might be overkill here. It may be fine if once in a while |
27 // we hit a race-condition and two subsequent calls get the same index... | 54 // we hit a race-condition and two subsequent calls get the same index... |
28 int index = sk_atomic_inc(&gPixelRefMutexRingIndex); | 55 int index = sk_atomic_inc(&gPixelRefMutexRingIndex); |
29 return &gPixelRefMutexRing[index & (PIXELREF_MUTEX_RING_COUNT - 1)]; | 56 return &gPixelRefMutexRing[index & (PIXELREF_MUTEX_RING_COUNT - 1)]; |
30 #else | |
31 return &gPixelRefMutex; | |
32 #endif | |
33 } | 57 } |
34 | 58 |
35 /////////////////////////////////////////////////////////////////////////////// | 59 /////////////////////////////////////////////////////////////////////////////// |
36 | 60 |
37 int32_t SkNextPixelRefGenerationID(); | 61 int32_t SkNextPixelRefGenerationID(); |
38 | 62 |
39 int32_t SkNextPixelRefGenerationID() { | 63 int32_t SkNextPixelRefGenerationID() { |
40 static int32_t gPixelRefGenerationID; | 64 static int32_t gPixelRefGenerationID; |
41 // do a loop in case our global wraps around, as we never want to | 65 // do a loop in case our global wraps around, as we never want to |
42 // return a 0 | 66 // return a 0 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
178 | 202 |
179 #ifdef SK_BUILD_FOR_ANDROID | 203 #ifdef SK_BUILD_FOR_ANDROID |
180 void SkPixelRef::globalRef(void* data) { | 204 void SkPixelRef::globalRef(void* data) { |
181 this->ref(); | 205 this->ref(); |
182 } | 206 } |
183 | 207 |
184 void SkPixelRef::globalUnref() { | 208 void SkPixelRef::globalUnref() { |
185 this->unref(); | 209 this->unref(); |
186 } | 210 } |
187 #endif | 211 #endif |
OLD | NEW |