From 5f62ed74342e44cb1b9671ffdac47c6a81416136 Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Wed, 15 Jan 2014 19:59:45 +0000 Subject: [PATCH] no need to refcnt colortables, since pixelrefs own them BUG=skia: R=halcanary@google.com, scroggo@google.com Review URL: https://codereview.chromium.org/139463007 git-svn-id: http://skia.googlecode.com/svn/trunk@13098 2bbb7eff-a529-9590-31e7-b0007b416f81 --- include/core/SkBitmap.h | 3 +-- src/core/SkBitmap.cpp | 24 ++++-------------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h index b8117bd..f53a0a7 100644 --- a/include/core/SkBitmap.h +++ b/include/core/SkBitmap.h @@ -669,8 +669,7 @@ private: mutable SkPixelRef* fPixelRef; mutable int fPixelLockCount; - // either user-specified (in which case it is not treated as mutable) - // or a cache of the returned value from fPixelRef->lockPixels() + // These are just caches from the locked pixelref mutable void* fPixels; mutable SkColorTable* fColorTable; // only meaningful for kIndex8 diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp index 27ea35e..9a5f1f2 100644 --- a/src/core/SkBitmap.cpp +++ b/src/core/SkBitmap.cpp @@ -101,15 +101,7 @@ SkBitmap& SkBitmap::operator=(const SkBitmap& src) { // we reset our locks if we get blown away fPixelLockCount = 0; - /* The src could be in 3 states - 1. no pixelref, in which case we just copy/ref the pixels/ctable - 2. unlocked pixelref, pixels/ctable should be null - 3. locked pixelref, we should lock the ref again ourselves - */ - if (NULL == fPixelRef) { - // leave fPixels as it is - SkSafeRef(fColorTable); // ref the user's ctable if present - } else { // we have a pixelref, so pixels/ctable reflect it + if (fPixelRef) { // ignore the values from the memcpy fPixels = NULL; fColorTable = NULL; @@ -345,14 +337,11 @@ void SkBitmap::updatePixelsFromRef() const { + fPixelRefOrigin.fX * fBytesPerPixel; } fPixels = p; - SkRefCnt_SafeAssign(fColorTable, fPixelRef->colorTable()); + fColorTable = fPixelRef->colorTable(); } else { SkASSERT(0 == fPixelLockCount); fPixels = NULL; - if (fColorTable) { - fColorTable->unref(); - fColorTable = NULL; - } + fColorTable = NULL; } } } @@ -510,11 +499,6 @@ void SkBitmap::freePixels() { // if we're gonna free the pixels, we certainly need to free the mipmap this->freeMipMap(); - if (fColorTable) { - fColorTable->unref(); - fColorTable = NULL; - } - if (NULL != fPixelRef) { if (fPixelLockCount > 0) { fPixelRef->unlockPixels(); @@ -525,6 +509,7 @@ void SkBitmap::freePixels() { } fPixelLockCount = 0; fPixels = NULL; + fColorTable = NULL; } void SkBitmap::freeMipMap() { @@ -1610,7 +1595,6 @@ void SkBitmap::validate() const { #endif SkASSERT(fFlags <= allFlags); SkASSERT(fPixelLockCount >= 0); - SkASSERT(NULL == fColorTable || (unsigned)fColorTable->getRefCnt() < 10000); SkASSERT((uint8_t)ComputeBytesPerPixel((Config)fConfig) == fBytesPerPixel); if (fPixels) { -- 2.7.4