diff options
Diffstat (limited to 'src/lazy/SkDiscardablePixelRef.cpp')
-rw-r--r-- | src/lazy/SkDiscardablePixelRef.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp index 50988587a7..b6dec1b3a1 100644 --- a/src/lazy/SkDiscardablePixelRef.cpp +++ b/src/lazy/SkDiscardablePixelRef.cpp @@ -18,6 +18,7 @@ SkDiscardablePixelRef::SkDiscardablePixelRef(const SkImageInfo& info, , fDMFactory(fact) , fRowBytes(rowBytes) , fDiscardableMemory(NULL) + , fDiscardableMemoryIsLocked(false) { SkASSERT(fGenerator != NULL); SkASSERT(fRowBytes > 0); @@ -28,8 +29,9 @@ SkDiscardablePixelRef::SkDiscardablePixelRef(const SkImageInfo& info, } SkDiscardablePixelRef::~SkDiscardablePixelRef() { - if (this->isLocked()) { + if (fDiscardableMemoryIsLocked) { fDiscardableMemory->unlock(); + fDiscardableMemoryIsLocked = false; } SkDELETE(fDiscardableMemory); SkSafeUnref(fDMFactory); @@ -39,6 +41,7 @@ SkDiscardablePixelRef::~SkDiscardablePixelRef() { bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) { if (fDiscardableMemory != NULL) { if (fDiscardableMemory->lock()) { + fDiscardableMemoryIsLocked = true; rec->fPixels = fDiscardableMemory->data(); rec->fColorTable = fCTable.get(); rec->fRowBytes = fRowBytes; @@ -46,16 +49,20 @@ bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) { } SkDELETE(fDiscardableMemory); fDiscardableMemory = NULL; + fDiscardableMemoryIsLocked = false; } const size_t size = this->info().getSafeSize(fRowBytes); if (fDMFactory != NULL) { fDiscardableMemory = fDMFactory->create(size); + fDiscardableMemoryIsLocked = true; } else { fDiscardableMemory = SkDiscardableMemory::Create(size); + fDiscardableMemoryIsLocked = true; } if (NULL == fDiscardableMemory) { + fDiscardableMemoryIsLocked = false; return false; // Memory allocation failed. } @@ -72,6 +79,7 @@ bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) { break; default: fDiscardableMemory->unlock(); + fDiscardableMemoryIsLocked = false; SkDELETE(fDiscardableMemory); fDiscardableMemory = NULL; return false; @@ -96,6 +104,7 @@ bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) { void SkDiscardablePixelRef::onUnlockPixels() { fDiscardableMemory->unlock(); + fDiscardableMemoryIsLocked = false; } bool SkInstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst, |