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

Unified Diff: src/core/SkScaledImageCache.h

Issue 507483002: retool image cache to be generic cache (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase + add comment in unlock Created 6 years, 4 months 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
« no previous file with comments | « src/core/SkBitmapProcState.cpp ('k') | src/core/SkScaledImageCache.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkScaledImageCache.h
diff --git a/src/core/SkScaledImageCache.h b/src/core/SkScaledImageCache.h
index 9eea55079bb71cc2720ed7c6de88975207732a59..c31f8ffed938843361304224999ffe9d4e3ffd50 100644
--- a/src/core/SkScaledImageCache.h
+++ b/src/core/SkScaledImageCache.h
@@ -25,8 +25,6 @@ class SkMipMap;
*/
class SkScaledImageCache {
public:
- struct ID;
-
struct Key {
// Call this to access your private contents. Must not use the address after calling init()
void* writableContents() { return this + 1; }
@@ -49,9 +47,6 @@ public:
return true;
}
- // delete using sk_free
- Key* clone() const;
-
private:
// store fCount32 first, so we don't consider it in operator<
int32_t fCount32; // 2 + user contents count32
@@ -62,6 +57,32 @@ public:
const uint32_t* as32SkipCount() const { return this->as32() + 1; }
};
+ struct Rec {
+ typedef SkScaledImageCache::Key Key;
+
+ Rec() : fLockCount(1) {}
+ virtual ~Rec() {}
+
+ uint32_t getHash() const { return this->getKey().hash(); }
+
+ virtual const Key& getKey() const = 0;
+ virtual size_t bytesUsed() const = 0;
+
+ // for SkTDynamicHash::Traits
+ static uint32_t Hash(const Key& key) { return key.hash(); }
+ static const Key& GetKey(const Rec& rec) { return rec.getKey(); }
+
+ private:
+ Rec* fNext;
+ Rec* fPrev;
+ int32_t fLockCount;
+ int32_t fPad;
+
+ friend class SkScaledImageCache;
+ };
+
+ typedef const Rec* ID;
+
/**
* Returns a locked/pinned SkDiscardableMemory instance for the specified
* number of bytes, or NULL on failure.
@@ -73,13 +94,10 @@ public:
* instance of this cache.
*/
- static ID* FindAndLock(const Key&, SkBitmap* result);
- static ID* AddAndLock(const Key&, const SkBitmap& result);
-
- static ID* FindAndLock(const Key&, const SkMipMap** result);
- static ID* AddAndLock(const Key&, const SkMipMap* result);
-
- static void Unlock(ID*);
+ static const Rec* FindAndLock(const Key& key);
+ static const Rec* AddAndLock(Rec*);
+ static void Add(Rec*);
+ static void Unlock(ID);
static size_t GetTotalBytesUsed();
static size_t GetTotalByteLimit();
@@ -115,22 +133,9 @@ public:
explicit SkScaledImageCache(size_t byteLimit);
~SkScaledImageCache();
- /**
- * Search the cache for a matching key. If found, return its bitmap and return its ID pointer.
- * Use the returned ID to unlock the cache when you are done using outBitmap.
- *
- * If a match is not found, outBitmap will be unmodifed, and NULL will be returned.
- */
- ID* findAndLock(const Key& key, SkBitmap* outBitmap);
- ID* findAndLock(const Key& key, const SkMipMap** returnedMipMap);
-
- /**
- * To add a new bitmap (or mipMap) to the cache, call
- * AddAndLock. Use the returned ptr to unlock the cache when you
- * are done using scaled.
- */
- ID* addAndLock(const Key&, const SkBitmap& bitmap);
- ID* addAndLock(const Key&, const SkMipMap* mipMap);
+ const Rec* findAndLock(const Key& key);
+ const Rec* addAndLock(Rec*);
+ void add(Rec*);
/**
* Given a non-null ID ptr returned by either findAndLock or addAndLock,
@@ -138,7 +143,7 @@ public:
* if needed. After this, the cached bitmap should no longer be
* referenced by the caller.
*/
- void unlock(ID*);
+ void unlock(ID);
size_t getTotalBytesUsed() const { return fTotalBytesUsed; }
size_t getTotalByteLimit() const { return fTotalByteLimit; }
@@ -164,8 +169,6 @@ public:
*/
void dump() const;
-public:
- struct Rec;
private:
Rec* fHead;
Rec* fTail;
@@ -182,9 +185,6 @@ private:
size_t fSingleAllocationByteLimit;
int fCount;
- Rec* findAndLock(const Key& key);
- ID* addAndLock(Rec* rec);
-
void purgeRec(Rec*);
void purgeAsNeeded();
« no previous file with comments | « src/core/SkBitmapProcState.cpp ('k') | src/core/SkScaledImageCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698