Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(737)

Unified Diff: src/lazy/SkDiscardablePixelRef.cpp

Issue 84783002: SkDiscardableMemory::Factory class (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/lazy/SkDiscardablePixelRef.cpp
diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp
index b6e1b1004ed7096fc180be5945aa44e5dfab1c1c..ddb390a8130c3ede14a13d9f6707990ff2903d05 100644
--- a/src/lazy/SkDiscardablePixelRef.cpp
+++ b/src/lazy/SkDiscardablePixelRef.cpp
@@ -8,11 +8,22 @@
#include "SkDiscardablePixelRef.h"
#include "SkDiscardableMemory.h"
-SkDiscardablePixelRef::SkDiscardablePixelRef(SkImageGenerator* generator,
+#if LAZY_CACHE_STATS
+#include "SkThread.h"
+
+int32_t SkDiscardablePixelRef::gCacheHits;
+int32_t SkDiscardablePixelRef::gCacheMisses;
+#endif // LAZY_CACHE_STATS
+
+typedef SkDiscardableMemory::Factory DMFactory;
+
+SkDiscardablePixelRef::SkDiscardablePixelRef(DMFactory* factory,
+ SkImageGenerator* generator,
const SkImageInfo& info,
size_t size,
size_t rowBytes)
- : fGenerator(generator)
+ : fDMFactory(factory)
+ , fGenerator(generator)
, fInfo(info)
, fSize(size)
, fRowBytes(rowBytes)
@@ -20,20 +31,36 @@ SkDiscardablePixelRef::SkDiscardablePixelRef(SkImageGenerator* generator,
SkASSERT(fGenerator != NULL);
SkASSERT(fSize > 0);
SkASSERT(fRowBytes > 0);
+ SkSafeRef(fDMFactory);
}
SkDiscardablePixelRef::~SkDiscardablePixelRef() {
+ SkDELETE(fDiscardableMemory);
SkDELETE(fGenerator);
+ SkSafeUnref(fDMFactory);
}
-void* SkDiscardablePixelRef::onLockPixels(SkColorTable**) {
+void* SkDiscardablePixelRef::onLockPixels(SkColorTable** colorTable) {
+ (void)colorTable;
if (fDiscardableMemory != NULL) {
if (fDiscardableMemory->lock()) {
+ #if LAZY_CACHE_STATS
+ sk_atomic_inc(&gCacheHits);
+ #endif
return fDiscardableMemory->data();
}
+ #if LAZY_CACHE_STATS
+ sk_atomic_inc(&gCacheMisses);
+ #endif
+ SkDELETE(fDiscardableMemory);
fDiscardableMemory = NULL;
}
- fDiscardableMemory = SkDiscardableMemory::Create(fSize);
+ SkASSERT(NULL == fDiscardableMemory);
+ if (fDMFactory != NULL) {
+ fDiscardableMemory = fDMFactory->create(fSize);
+ } else {
+ fDiscardableMemory = SkDiscardableMemory::Create(fSize);
+ }
if (NULL == fDiscardableMemory) {
return NULL; // Memory allocation failed.
}
@@ -50,19 +77,21 @@ void SkDiscardablePixelRef::onUnlockPixels() {
}
bool SkDiscardablePixelRef::Install(SkImageGenerator* generator,
- SkBitmap* dst) {
+ SkBitmap* dst,
+ DMFactory* factory) {
SkImageInfo info;
SkASSERT(generator != NULL);
if ((NULL == generator)
|| (!generator->getInfo(&info))
- || (!dst->setConfig(info, 0))) {
+ || (!dst->setConfig(info, 0))
+ || (0 == dst->getSize())) {
SkDELETE(generator);
return false;
}
SkAutoTUnref<SkDiscardablePixelRef> ref(SkNEW_ARGS(SkDiscardablePixelRef,
- (generator, info,
- dst->getSize(),
- dst->rowBytes())));
+ (factory, generator,
+ info, dst->getSize(),
+ dst->rowBytes())));
dst->setPixelRef(ref);
return true;
}

Powered by Google App Engine
This is Rietveld 408576698