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(); |