| Index: src/core/SkPixelRef.cpp
|
| ===================================================================
|
| --- src/core/SkPixelRef.cpp (revision 12666)
|
| +++ src/core/SkPixelRef.cpp (working copy)
|
| @@ -82,32 +82,48 @@
|
| // just need a > 0 value, so pick a funny one to aid in debugging
|
| #define SKPIXELREF_PRELOCKED_LOCKCOUNT 123456789
|
|
|
| +SkPixelRef::SkPixelRef(const SkImageInfo& info, SkBaseMutex* mutex) {
|
| + this->setMutex(mutex);
|
| + fInfo = info;
|
| + fPixels = NULL;
|
| + fColorTable = NULL; // we do not track ownership of this
|
| + fLockCount = 0;
|
| + this->needsNewGenID();
|
| + fIsImmutable = false;
|
| + fPreLocked = false;
|
| +}
|
| +
|
| SkPixelRef::SkPixelRef(const SkImageInfo& info) {
|
| this->setMutex(NULL);
|
| fInfo = info;
|
| - fRec.zero();
|
| + fPixels = NULL;
|
| + fColorTable = NULL; // we do not track ownership of this
|
| fLockCount = 0;
|
| this->needsNewGenID();
|
| fIsImmutable = false;
|
| fPreLocked = false;
|
| }
|
|
|
| -SkPixelRef::SkPixelRef(const SkImageInfo& info, SkBaseMutex* mutex) {
|
| +#ifdef SK_SUPPORT_LEGACY_PIXELREF_CONSTRUCTOR
|
| +// THIS GUY IS DEPRECATED -- don't use me!
|
| +SkPixelRef::SkPixelRef(SkBaseMutex* mutex) {
|
| this->setMutex(mutex);
|
| - fInfo = info;
|
| - fRec.zero();
|
| + // Fill with dummy values.
|
| + sk_bzero(&fInfo, sizeof(fInfo));
|
| + fPixels = NULL;
|
| + fColorTable = NULL; // we do not track ownership of this
|
| fLockCount = 0;
|
| this->needsNewGenID();
|
| fIsImmutable = false;
|
| fPreLocked = false;
|
| }
|
| +#endif
|
|
|
| SkPixelRef::SkPixelRef(SkFlattenableReadBuffer& buffer, SkBaseMutex* mutex)
|
| : INHERITED(buffer) {
|
| this->setMutex(mutex);
|
| -
|
| - fInfo.unflatten(buffer);
|
| - fRec.zero();
|
| + fPixels = NULL;
|
| + fColorTable = NULL; // we do not track ownership of this
|
| fLockCount = 0;
|
| fIsImmutable = buffer.readBool();
|
| fGenerationID = buffer.readUInt();
|
| @@ -131,13 +147,12 @@
|
| that.fUniqueGenerationID = false;
|
| }
|
|
|
| -void SkPixelRef::setPreLocked(void* pixels, size_t rowBytes, SkColorTable* ctable) {
|
| +void SkPixelRef::setPreLocked(void* pixels, SkColorTable* ctable) {
|
| #ifndef SK_IGNORE_PIXELREF_SETPRELOCKED
|
| // only call me in your constructor, otherwise fLockCount tracking can get
|
| // out of sync.
|
| - fRec.fPixels = pixels;
|
| - fRec.fColorTable = ctable;
|
| - fRec.fRowBytes = rowBytes;
|
| + fPixels = pixels;
|
| + fColorTable = ctable;
|
| fLockCount = SKPIXELREF_PRELOCKED_LOCKCOUNT;
|
| fPreLocked = true;
|
| #endif
|
| @@ -145,8 +160,6 @@
|
|
|
| void SkPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const {
|
| this->INHERITED::flatten(buffer);
|
| -
|
| - fInfo.flatten(buffer);
|
| buffer.writeBool(fIsImmutable);
|
| // We write the gen ID into the picture for within-process recording. This
|
| // is safe since the same genID will never refer to two different sets of
|
| @@ -161,32 +174,22 @@
|
| }
|
| }
|
|
|
| -bool SkPixelRef::lockPixels(LockRec* rec) {
|
| +void SkPixelRef::lockPixels() {
|
| SkASSERT(!fPreLocked || SKPIXELREF_PRELOCKED_LOCKCOUNT == fLockCount);
|
| -
|
| +
|
| if (!fPreLocked) {
|
| SkAutoMutexAcquire ac(*fMutex);
|
| -
|
| - if (1 == ++fLockCount) {
|
| - SkASSERT(fRec.isZero());
|
|
|
| - LockRec rec;
|
| - if (!this->onNewLockPixels(&rec)) {
|
| - return false;
|
| + if (1 == ++fLockCount) {
|
| + fPixels = this->onLockPixels(&fColorTable);
|
| + // If onLockPixels failed, it will return NULL
|
| + if (NULL == fPixels) {
|
| + fColorTable = NULL;
|
| }
|
| - SkASSERT(!rec.isZero()); // else why did onNewLock return true?
|
| - fRec = rec;
|
| }
|
| }
|
| - *rec = fRec;
|
| - return true;
|
| }
|
|
|
| -bool SkPixelRef::lockPixels() {
|
| - LockRec rec;
|
| - return this->lockPixels(&rec);
|
| -}
|
| -
|
| void SkPixelRef::unlockPixels() {
|
| SkASSERT(!fPreLocked || SKPIXELREF_PRELOCKED_LOCKCOUNT == fLockCount);
|
|
|
| @@ -196,11 +199,12 @@
|
| SkASSERT(fLockCount > 0);
|
| if (0 == --fLockCount) {
|
| // don't call onUnlockPixels unless onLockPixels succeeded
|
| - if (fRec.fPixels) {
|
| + if (fPixels) {
|
| this->onUnlockPixels();
|
| - fRec.zero();
|
| + fPixels = NULL;
|
| + fColorTable = NULL;
|
| } else {
|
| - SkASSERT(fRec.isZero());
|
| + SkASSERT(NULL == fColorTable);
|
| }
|
| }
|
| }
|
| @@ -282,29 +286,6 @@
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -#ifdef SK_SUPPORT_LEGACY_ONLOCKPIXELS
|
| -
|
| -void* SkPixelRef::onLockPixels(SkColorTable** ctable) {
|
| - return NULL;
|
| -}
|
| -
|
| -bool SkPixelRef::onNewLockPixels(LockRec* rec) {
|
| - SkColorTable* ctable;
|
| - void* pixels = this->onLockPixels(&ctable);
|
| - if (!pixels) {
|
| - return false;
|
| - }
|
| -
|
| - rec->fPixels = pixels;
|
| - rec->fColorTable = ctable;
|
| - rec->fRowBytes = 0; // callers don't currently need this (thank goodness)
|
| - return true;
|
| -}
|
| -
|
| -#endif
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| #ifdef SK_BUILD_FOR_ANDROID
|
| void SkPixelRef::globalRef(void* data) {
|
| this->ref();
|
|
|