Revert of https://codereview.chromium.org/112783004/
Reason for revert: Failing assert on Android
R=scroggo@google.com, halcanary@google.com, reed@google.com, rmistry@google.com
TBR=halcanary@google.com, reed@google.com, scroggo@google.com
NOTREECHECKS=true
NOTRY=true
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/93673005
git-svn-id: http://skia.googlecode.com/svn/trunk/src@12646 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/core/SkPixelRef.cpp b/core/SkPixelRef.cpp
index da88ca5..e93882a 100644
--- a/core/SkPixelRef.cpp
+++ b/core/SkPixelRef.cpp
@@ -182,10 +182,6 @@
if (1 == ++fLockCount) {
fPixels = this->onLockPixels(&fColorTable);
- // If onLockPixels failed, it will return NULL
- if (NULL == fPixels) {
- fColorTable = NULL;
- }
}
}
}
@@ -198,14 +194,9 @@
SkASSERT(fLockCount > 0);
if (0 == --fLockCount) {
- // don't call onUnlockPixels unless onLockPixels succeeded
- if (fPixels) {
- this->onUnlockPixels();
- fPixels = NULL;
- fColorTable = NULL;
- } else {
- SkASSERT(NULL == fColorTable);
- }
+ this->onUnlockPixels();
+ fPixels = NULL;
+ fColorTable = NULL;
}
}
}
diff --git a/core/SkScaledImageCache.cpp b/core/SkScaledImageCache.cpp
index 1b8ad52..b3956f4 100644
--- a/core/SkScaledImageCache.cpp
+++ b/core/SkScaledImageCache.cpp
@@ -209,6 +209,7 @@
SkDiscardableMemory* fDM;
size_t fRB;
bool fFirstTime;
+ bool fIsLocked;
typedef SkPixelRef INHERITED;
};
@@ -224,6 +225,7 @@
SkASSERT(dm->data());
fFirstTime = true;
+ fIsLocked = false;
}
SkOneShotDiscardablePixelRef::~SkOneShotDiscardablePixelRef() {
@@ -233,16 +235,21 @@
void* SkOneShotDiscardablePixelRef::onLockPixels(SkColorTable** ctable) {
if (fFirstTime) {
// we're already locked
- SkASSERT(fDM->data());
fFirstTime = false;
return fDM->data();
}
- return fDM->lock() ? fDM->data() : NULL;
+
+ SkASSERT(!fIsLocked);
+ fIsLocked = fDM->lock();
+ return fIsLocked ? fDM->data() : NULL;
}
void SkOneShotDiscardablePixelRef::onUnlockPixels() {
SkASSERT(!fFirstTime);
- fDM->unlock();
+ if (fIsLocked) {
+ fIsLocked = false;
+ fDM->unlock();
+ }
}
size_t SkOneShotDiscardablePixelRef::getAllocatedSizeInBytes() const {
diff --git a/images/SkImageRef_ashmem.cpp b/images/SkImageRef_ashmem.cpp
index 9933ca9..0dba1d1 100644
--- a/images/SkImageRef_ashmem.cpp
+++ b/images/SkImageRef_ashmem.cpp
@@ -1,10 +1,10 @@
+
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
-
#include "SkImageRef_ashmem.h"
#include "SkImageDecoder.h"
#include "SkFlattenableBuffers.h"
diff --git a/lazy/SkCachingPixelRef.cpp b/lazy/SkCachingPixelRef.cpp
index b7eaf57..667a949 100644
--- a/lazy/SkCachingPixelRef.cpp
+++ b/lazy/SkCachingPixelRef.cpp
@@ -90,7 +90,9 @@
}
void SkCachingPixelRef::onUnlockPixels() {
- SkASSERT(fScaledCacheId != NULL);
- SkScaledImageCache::Unlock( static_cast<SkScaledImageCache::ID*>(fScaledCacheId));
- fScaledCacheId = NULL;
+ if (fScaledCacheId != NULL) {
+ SkScaledImageCache::Unlock(
+ static_cast<SkScaledImageCache::ID*>(fScaledCacheId));
+ fScaledCacheId = NULL;
+ }
}
diff --git a/lazy/SkDiscardablePixelRef.cpp b/lazy/SkDiscardablePixelRef.cpp
index 2528a99..6a9507c 100644
--- a/lazy/SkDiscardablePixelRef.cpp
+++ b/lazy/SkDiscardablePixelRef.cpp
@@ -58,7 +58,9 @@
return pixels;
}
void SkDiscardablePixelRef::onUnlockPixels() {
- fDiscardableMemory->unlock();
+ if (fDiscardableMemory != NULL) {
+ fDiscardableMemory->unlock();
+ }
}
bool SkInstallDiscardablePixelRef(SkImageGenerator* generator,