| 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" |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 } | 175 } |
| 176 | 176 |
| 177 void SkPixelRef::lockPixels() { | 177 void SkPixelRef::lockPixels() { |
| 178 SkASSERT(!fPreLocked || SKPIXELREF_PRELOCKED_LOCKCOUNT == fLockCount); | 178 SkASSERT(!fPreLocked || SKPIXELREF_PRELOCKED_LOCKCOUNT == fLockCount); |
| 179 | 179 |
| 180 if (!fPreLocked) { | 180 if (!fPreLocked) { |
| 181 SkAutoMutexAcquire ac(*fMutex); | 181 SkAutoMutexAcquire ac(*fMutex); |
| 182 | 182 |
| 183 if (1 == ++fLockCount) { | 183 if (1 == ++fLockCount) { |
| 184 fPixels = this->onLockPixels(&fColorTable); | 184 fPixels = this->onLockPixels(&fColorTable); |
| 185 // If onLockPixels failed, it will return NULL |
| 186 if (NULL == fPixels) { |
| 187 fColorTable = NULL; |
| 188 } |
| 185 } | 189 } |
| 186 } | 190 } |
| 187 } | 191 } |
| 188 | 192 |
| 189 void SkPixelRef::unlockPixels() { | 193 void SkPixelRef::unlockPixels() { |
| 190 SkASSERT(!fPreLocked || SKPIXELREF_PRELOCKED_LOCKCOUNT == fLockCount); | 194 SkASSERT(!fPreLocked || SKPIXELREF_PRELOCKED_LOCKCOUNT == fLockCount); |
| 191 | 195 |
| 192 if (!fPreLocked) { | 196 if (!fPreLocked) { |
| 193 SkAutoMutexAcquire ac(*fMutex); | 197 SkAutoMutexAcquire ac(*fMutex); |
| 194 | 198 |
| 195 SkASSERT(fLockCount > 0); | 199 SkASSERT(fLockCount > 0); |
| 196 if (0 == --fLockCount) { | 200 if (0 == --fLockCount) { |
| 197 this->onUnlockPixels(); | 201 // don't call onUnlockPixels unless onLockPixels succeeded |
| 198 fPixels = NULL; | 202 if (fPixels) { |
| 199 fColorTable = NULL; | 203 this->onUnlockPixels(); |
| 204 fPixels = NULL; |
| 205 fColorTable = NULL; |
| 206 } else { |
| 207 SkASSERT(NULL == fColorTable); |
| 208 } |
| 200 } | 209 } |
| 201 } | 210 } |
| 202 } | 211 } |
| 203 | 212 |
| 204 bool SkPixelRef::lockPixelsAreWritable() const { | 213 bool SkPixelRef::lockPixelsAreWritable() const { |
| 205 return this->onLockPixelsAreWritable(); | 214 return this->onLockPixelsAreWritable(); |
| 206 } | 215 } |
| 207 | 216 |
| 208 bool SkPixelRef::onLockPixelsAreWritable() const { | 217 bool SkPixelRef::onLockPixelsAreWritable() const { |
| 209 return true; | 218 return true; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 | 288 |
| 280 #ifdef SK_BUILD_FOR_ANDROID | 289 #ifdef SK_BUILD_FOR_ANDROID |
| 281 void SkPixelRef::globalRef(void* data) { | 290 void SkPixelRef::globalRef(void* data) { |
| 282 this->ref(); | 291 this->ref(); |
| 283 } | 292 } |
| 284 | 293 |
| 285 void SkPixelRef::globalUnref() { | 294 void SkPixelRef::globalUnref() { |
| 286 this->unref(); | 295 this->unref(); |
| 287 } | 296 } |
| 288 #endif | 297 #endif |
| OLD | NEW |