Index: src/lazy/SkPurgeableImageCache.cpp |
diff --git a/src/lazy/SkPurgeableImageCache.cpp b/src/lazy/SkPurgeableImageCache.cpp |
deleted file mode 100644 |
index 0f2c5e3c8e382f2f8e067ef376edafe555bd02d8..0000000000000000000000000000000000000000 |
--- a/src/lazy/SkPurgeableImageCache.cpp |
+++ /dev/null |
@@ -1,159 +0,0 @@ |
-/* |
- * Copyright 2013 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#include "SkThread.h" |
-#include "SkPurgeableImageCache.h" |
-#include "SkPurgeableMemoryBlock.h" |
- |
-#ifdef SK_DEBUG |
- #include "SkTSearch.h" |
-#endif |
- |
-SK_DECLARE_STATIC_MUTEX(gPurgeableImageMutex); |
- |
-SkImageCache* SkPurgeableImageCache::Create() { |
- if (!SkPurgeableMemoryBlock::IsSupported()) { |
- return NULL; |
- } |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- static SkPurgeableImageCache gCache; |
- gCache.ref(); |
- return &gCache; |
-} |
- |
-SkPurgeableImageCache::SkPurgeableImageCache() {} |
- |
-#ifdef SK_DEBUG |
-SkPurgeableImageCache::~SkPurgeableImageCache() { |
- SkASSERT(fRecs.count() == 0); |
-} |
-#endif |
- |
- |
-void* SkPurgeableImageCache::allocAndPinCache(size_t bytes, intptr_t* ID) { |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- |
- SkPurgeableMemoryBlock* block = SkPurgeableMemoryBlock::Create(bytes); |
- if (NULL == block) { |
- return NULL; |
- } |
- |
- SkPurgeableMemoryBlock::PinResult pinResult; |
- void* data = block->pin(&pinResult); |
- if (NULL == data) { |
- SkDELETE(block); |
- return NULL; |
- } |
- |
- SkASSERT(ID != NULL); |
- *ID = reinterpret_cast<intptr_t>(block); |
-#ifdef SK_DEBUG |
- // Insert into the array of all recs: |
- int index = this->findRec(*ID); |
- SkASSERT(index < 0); |
- fRecs.insert(~index, 1, ID); |
-#endif |
- return data; |
-} |
- |
-void* SkPurgeableImageCache::pinCache(intptr_t ID, SkImageCache::DataStatus* status) { |
- SkASSERT(ID != SkImageCache::UNINITIALIZED_ID); |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- |
- SkASSERT(this->findRec(ID) >= 0); |
- SkPurgeableMemoryBlock* block = reinterpret_cast<SkPurgeableMemoryBlock*>(ID); |
- SkPurgeableMemoryBlock::PinResult pinResult; |
- void* data = block->pin(&pinResult); |
- if (NULL == data) { |
- this->removeRec(ID); |
- return NULL; |
- } |
- |
- switch (pinResult) { |
- case SkPurgeableMemoryBlock::kRetained_PinResult: |
- *status = SkImageCache::kRetained_DataStatus; |
- break; |
- |
- case SkPurgeableMemoryBlock::kUninitialized_PinResult: |
- *status = SkImageCache::kUninitialized_DataStatus; |
- break; |
- |
- default: |
- // Invalid value. Treat as a failure to pin. |
- SkASSERT(false); |
- this->removeRec(ID); |
- return NULL; |
- } |
- |
- return data; |
-} |
- |
-void SkPurgeableImageCache::releaseCache(intptr_t ID) { |
- SkASSERT(ID != SkImageCache::UNINITIALIZED_ID); |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- |
- SkASSERT(this->findRec(ID) >= 0); |
- SkPurgeableMemoryBlock* block = reinterpret_cast<SkPurgeableMemoryBlock*>(ID); |
- block->unpin(); |
-} |
- |
-void SkPurgeableImageCache::throwAwayCache(intptr_t ID) { |
- SkASSERT(ID != SkImageCache::UNINITIALIZED_ID); |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- |
- this->removeRec(ID); |
-} |
- |
-#ifdef SK_DEBUG |
-SkImageCache::MemoryStatus SkPurgeableImageCache::getMemoryStatus(intptr_t ID) const { |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- if (SkImageCache::UNINITIALIZED_ID == ID || this->findRec(ID) < 0) { |
- return SkImageCache::kFreed_MemoryStatus; |
- } |
- |
- SkPurgeableMemoryBlock* block = reinterpret_cast<SkPurgeableMemoryBlock*>(ID); |
- if (block->isPinned()) { |
- return SkImageCache::kPinned_MemoryStatus; |
- } |
- return SkImageCache::kUnpinned_MemoryStatus; |
-} |
- |
-void SkPurgeableImageCache::purgeAllUnpinnedCaches() { |
- SkAutoMutexAcquire ac(&gPurgeableImageMutex); |
- if (SkPurgeableMemoryBlock::PlatformSupportsPurgingAllUnpinnedBlocks()) { |
- SkPurgeableMemoryBlock::PurgeAllUnpinnedBlocks(); |
- } else { |
- // Go through the blocks, and purge them individually. |
- // Rather than deleting the blocks, which would interfere with further calls, purge them |
- // and keep them around. |
- for (int i = 0; i < fRecs.count(); i++) { |
- SkPurgeableMemoryBlock* block = reinterpret_cast<SkPurgeableMemoryBlock*>(fRecs[i]); |
- if (!block->isPinned()) { |
- if (!block->purge()) { |
- // FIXME: This should be more meaningful (which one, etc...) |
- SkDebugf("Failed to purge\n"); |
- } |
- } |
- } |
- } |
-} |
- |
-int SkPurgeableImageCache::findRec(intptr_t rec) const { |
- return SkTSearch(fRecs.begin(), fRecs.count(), rec, sizeof(intptr_t)); |
-} |
-#endif |
- |
-void SkPurgeableImageCache::removeRec(intptr_t ID) { |
-#ifdef SK_DEBUG |
- int index = this->findRec(ID); |
- SkASSERT(index >= 0); |
- fRecs.remove(index); |
-#endif |
- SkPurgeableMemoryBlock* block = reinterpret_cast<SkPurgeableMemoryBlock*>(ID); |
- SkASSERT(!block->isPinned()); |
- SkDELETE(block); |
-} |