Index: src/core/SkResourceCache.cpp |
diff --git a/src/core/SkResourceCache.cpp b/src/core/SkResourceCache.cpp |
index 240d1977e53968d417de449d84ff42c8e34f405e..43155470dbc9ed208e9479349dd6d18e81a9a911 100644 |
--- a/src/core/SkResourceCache.cpp |
+++ b/src/core/SkResourceCache.cpp |
@@ -79,7 +79,7 @@ class SkOneShotDiscardablePixelRef : public SkPixelRef { |
public: |
// Ownership of the discardablememory is transfered to the pixelref |
- SkOneShotDiscardablePixelRef(const SkImageInfo&, SkDiscardableMemory*, size_t rowBytes); |
+ SkOneShotDiscardablePixelRef(const SkImageInfo&, SkDiscardableMemory*, size_t rowBytes, SkColorTable* ctable); |
scroggo
2015/11/09 20:18:09
nit: over 100 chars.
Also, the name "ctable" adds
|
~SkOneShotDiscardablePixelRef(); |
protected: |
@@ -93,22 +93,29 @@ private: |
SkDiscardableMemory* fDM; |
size_t fRB; |
bool fFirstTime; |
+ SkColorTable* fCTable; |
scroggo
2015/11/09 20:18:09
Can you add a comment about ownership of the color
|
typedef SkPixelRef INHERITED; |
}; |
SkOneShotDiscardablePixelRef::SkOneShotDiscardablePixelRef(const SkImageInfo& info, |
SkDiscardableMemory* dm, |
- size_t rowBytes) |
+ size_t rowBytes, |
+ SkColorTable* ctable) |
: INHERITED(info) |
, fDM(dm) |
, fRB(rowBytes) |
+ , fCTable(ctable) |
{ |
SkASSERT(dm->data()); |
fFirstTime = true; |
+ SkSafeRef(ctable); |
} |
-SkOneShotDiscardablePixelRef::~SkOneShotDiscardablePixelRef() { delete fDM; } |
+SkOneShotDiscardablePixelRef::~SkOneShotDiscardablePixelRef() { |
+ delete fDM; |
+ SkSafeUnref(fCTable); |
+} |
bool SkOneShotDiscardablePixelRef::onNewLockPixels(LockRec* rec) { |
if (fFirstTime) { |
@@ -132,7 +139,7 @@ bool SkOneShotDiscardablePixelRef::onNewLockPixels(LockRec* rec) { |
SUCCESS: |
rec->fPixels = fDM->data(); |
- rec->fColorTable = nullptr; |
+ rec->fColorTable = fCTable; |
rec->fRowBytes = fRB; |
return true; |
} |
@@ -166,18 +173,21 @@ bool SkResourceCacheDiscardableAllocator::allocPixelRef(SkBitmap* bitmap, SkColo |
return false; |
} |
- SkDiscardableMemory* dm = fFactory(size); |
- if (nullptr == dm) { |
- return false; |
+ if (kIndex_8_SkColorType == bitmap->colorType()) { |
+ if (!ctable) { |
+ return false; |
+ } |
+ } else { |
+ ctable = nullptr; |
} |
- // can we relax this? |
- if (kN32_SkColorType != bitmap->colorType()) { |
+ SkDiscardableMemory* dm = fFactory(size); |
+ if (nullptr == dm) { |
return false; |
} |
SkImageInfo info = bitmap->info(); |
- bitmap->setPixelRef(new SkOneShotDiscardablePixelRef(info, dm, bitmap->rowBytes()))->unref(); |
+ bitmap->setPixelRef(new SkOneShotDiscardablePixelRef(info, dm, bitmap->rowBytes(), ctable))->unref(); |
scroggo
2015/11/09 20:18:09
nit: over 100 chars
|
bitmap->lockPixels(); |
return bitmap->readyToDraw(); |
} |