| Index: src/lazy/SkLruImageCache.cpp
|
| diff --git a/src/lazy/SkLruImageCache.cpp b/src/lazy/SkLruImageCache.cpp
|
| deleted file mode 100644
|
| index 26f7ef54838bd8c61fd47178fe7a30eba895e371..0000000000000000000000000000000000000000
|
| --- a/src/lazy/SkLruImageCache.cpp
|
| +++ /dev/null
|
| @@ -1,203 +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 "SkLruImageCache.h"
|
| -
|
| -static intptr_t NextGenerationID() {
|
| - static intptr_t gNextID;
|
| - do {
|
| - gNextID++;
|
| - } while (SkImageCache::UNINITIALIZED_ID == gNextID);
|
| - return gNextID;
|
| -}
|
| -
|
| -class CachedPixels : public SkNoncopyable {
|
| -
|
| -public:
|
| - CachedPixels(size_t length)
|
| - : fLength(length)
|
| - , fID(NextGenerationID())
|
| - , fLocked(false) {
|
| - fAddr = sk_malloc_throw(length);
|
| - }
|
| -
|
| - ~CachedPixels() {
|
| - sk_free(fAddr);
|
| - }
|
| -
|
| - void* getData() { return fAddr; }
|
| -
|
| - intptr_t getID() const { return fID; }
|
| -
|
| - size_t getLength() const { return fLength; }
|
| -
|
| - void lock() { SkASSERT(!fLocked); fLocked = true; }
|
| -
|
| - void unlock() { SkASSERT(fLocked); fLocked = false; }
|
| -
|
| - bool isLocked() const { return fLocked; }
|
| -
|
| -private:
|
| - void* fAddr;
|
| - size_t fLength;
|
| - const intptr_t fID;
|
| - bool fLocked;
|
| - SK_DECLARE_INTERNAL_LLIST_INTERFACE(CachedPixels);
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SkLruImageCache::SkLruImageCache(size_t budget)
|
| - : fRamBudget(budget)
|
| - , fRamUsed(0) {}
|
| -
|
| -SkLruImageCache::~SkLruImageCache() {
|
| - // Don't worry about updating pointers. All will be deleted.
|
| - Iter iter;
|
| - CachedPixels* pixels = iter.init(fLRU, Iter::kTail_IterStart);
|
| - while (pixels != NULL) {
|
| - CachedPixels* prev = iter.prev();
|
| - SkASSERT(!pixels->isLocked());
|
| -#ifdef SK_DEBUG
|
| - fRamUsed -= pixels->getLength();
|
| -#endif
|
| - SkDELETE(pixels);
|
| - pixels = prev;
|
| - }
|
| -#ifdef SK_DEBUG
|
| - SkASSERT(fRamUsed == 0);
|
| -#endif
|
| -}
|
| -
|
| -#ifdef SK_DEBUG
|
| -SkImageCache::MemoryStatus SkLruImageCache::getMemoryStatus(intptr_t ID) const {
|
| - if (SkImageCache::UNINITIALIZED_ID == ID) {
|
| - return SkImageCache::kFreed_MemoryStatus;
|
| - }
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - CachedPixels* pixels = this->findByID(ID);
|
| - if (NULL == pixels) {
|
| - return SkImageCache::kFreed_MemoryStatus;
|
| - }
|
| - if (pixels->isLocked()) {
|
| - return SkImageCache::kPinned_MemoryStatus;
|
| - }
|
| - return SkImageCache::kUnpinned_MemoryStatus;
|
| -}
|
| -
|
| -void SkLruImageCache::purgeAllUnpinnedCaches() {
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - this->purgeTilAtOrBelow(0);
|
| -}
|
| -#endif
|
| -
|
| -size_t SkLruImageCache::setImageCacheLimit(size_t newLimit) {
|
| - size_t oldLimit = fRamBudget;
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - fRamBudget = newLimit;
|
| - this->purgeIfNeeded();
|
| - return oldLimit;
|
| -}
|
| -
|
| -void* SkLruImageCache::allocAndPinCache(size_t bytes, intptr_t* ID) {
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - CachedPixels* pixels = SkNEW_ARGS(CachedPixels, (bytes));
|
| - if (ID != NULL) {
|
| - *ID = pixels->getID();
|
| - }
|
| - pixels->lock();
|
| - fRamUsed += bytes;
|
| - fLRU.addToHead(pixels);
|
| - this->purgeIfNeeded();
|
| - return pixels->getData();
|
| -}
|
| -
|
| -void* SkLruImageCache::pinCache(intptr_t ID, SkImageCache::DataStatus* status) {
|
| - SkASSERT(ID != SkImageCache::UNINITIALIZED_ID);
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - CachedPixels* pixels = this->findByID(ID);
|
| - if (NULL == pixels) {
|
| - return NULL;
|
| - }
|
| - if (pixels != fLRU.head()) {
|
| - fLRU.remove(pixels);
|
| - fLRU.addToHead(pixels);
|
| - }
|
| - SkASSERT(status != NULL);
|
| - // This cache will never return pinned memory whose data has been overwritten.
|
| - *status = SkImageCache::kRetained_DataStatus;
|
| - pixels->lock();
|
| - return pixels->getData();
|
| -}
|
| -
|
| -void SkLruImageCache::releaseCache(intptr_t ID) {
|
| - SkASSERT(ID != SkImageCache::UNINITIALIZED_ID);
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - CachedPixels* pixels = this->findByID(ID);
|
| - SkASSERT(pixels != NULL);
|
| - pixels->unlock();
|
| - this->purgeIfNeeded();
|
| -}
|
| -
|
| -void SkLruImageCache::throwAwayCache(intptr_t ID) {
|
| - SkASSERT(ID != SkImageCache::UNINITIALIZED_ID);
|
| - SkAutoMutexAcquire ac(&fMutex);
|
| - CachedPixels* pixels = this->findByID(ID);
|
| - if (pixels != NULL) {
|
| - if (pixels->isLocked()) {
|
| - pixels->unlock();
|
| - }
|
| - this->removePixels(pixels);
|
| - }
|
| -}
|
| -
|
| -void SkLruImageCache::removePixels(CachedPixels* pixels) {
|
| - // Mutex is already locked.
|
| - SkASSERT(!pixels->isLocked());
|
| - const size_t size = pixels->getLength();
|
| - SkASSERT(size <= fRamUsed);
|
| - fLRU.remove(pixels);
|
| - SkDELETE(pixels);
|
| - fRamUsed -= size;
|
| -}
|
| -
|
| -CachedPixels* SkLruImageCache::findByID(intptr_t ID) const {
|
| - // Mutex is already locked.
|
| - Iter iter;
|
| - // Start from the head, most recently used.
|
| - CachedPixels* pixels = iter.init(fLRU, Iter::kHead_IterStart);
|
| - while (pixels != NULL) {
|
| - if (pixels->getID() == ID) {
|
| - return pixels;
|
| - }
|
| - pixels = iter.next();
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -void SkLruImageCache::purgeIfNeeded() {
|
| - // Mutex is already locked.
|
| - if (fRamBudget > 0) {
|
| - this->purgeTilAtOrBelow(fRamBudget);
|
| - }
|
| -}
|
| -
|
| -void SkLruImageCache::purgeTilAtOrBelow(size_t limit) {
|
| - // Mutex is already locked.
|
| - if (fRamUsed > limit) {
|
| - Iter iter;
|
| - // Start from the tail, least recently used.
|
| - CachedPixels* pixels = iter.init(fLRU, Iter::kTail_IterStart);
|
| - while (pixels != NULL && fRamUsed > limit) {
|
| - CachedPixels* prev = iter.prev();
|
| - if (!pixels->isLocked()) {
|
| - this->removePixels(pixels);
|
| - }
|
| - pixels = prev;
|
| - }
|
| - }
|
| -}
|
|
|