| Index: src/gpu/GrResourceCache.h
|
| diff --git a/src/gpu/GrResourceCache.h b/src/gpu/GrResourceCache.h
|
| index 0f19b98ece9261e2e0166053cd501c26fd70df0b..a908140aaf19b8723113f4e7e7a9cbe1852d48fe 100644
|
| --- a/src/gpu/GrResourceCache.h
|
| +++ b/src/gpu/GrResourceCache.h
|
| @@ -29,14 +29,15 @@ class SkString;
|
| * 1) A scratch key. This is for resources whose allocations are cached but not their contents.
|
| * Multiple resources can share the same scratch key. This is so a caller can have two
|
| * resource instances with the same properties (e.g. multipass rendering that ping-pongs
|
| - * between two temporary surfaces. The scratch key is set at resource creation time and
|
| + * between two temporary surfaces). The scratch key is set at resource creation time and
|
| * should never change. Resources need not have a scratch key.
|
| - * 2) A content key. This key represents the contents of the resource rather than just its
|
| - * allocation properties. They may not collide. The content key can be set after resource
|
| + * 2) A unique key. This key's meaning is specific to the domain that created the key. Only one
|
| + * resource may have a given unique key. The unique key can be set after resource creation
|
| * creation. Currently it may only be set once and cannot be cleared. This restriction will
|
| * be removed.
|
| + * A unique key always takes precedence over a scratch key when a resource has both types of keys.
|
| * If a resource has neither key type then it will be deleted as soon as the last reference to it
|
| - * is dropped. If a key has both keys the content key takes precedence.
|
| + * is dropped.
|
| */
|
| class GrResourceCache {
|
| public:
|
| @@ -116,10 +117,10 @@ public:
|
| #endif
|
|
|
| /**
|
| - * Find a resource that matches a content key.
|
| + * Find a resource that matches a unique key.
|
| */
|
| - GrGpuResource* findAndRefContentResource(const GrContentKey& contentKey) {
|
| - GrGpuResource* resource = fContentHash.find(contentKey);
|
| + GrGpuResource* findAndRefUniqueResource(const GrUniqueKey& key) {
|
| + GrGpuResource* resource = fUniqueHash.find(key);
|
| if (resource) {
|
| this->refAndMakeResourceMRU(resource);
|
| }
|
| @@ -127,19 +128,19 @@ public:
|
| }
|
|
|
| /**
|
| - * Query whether a content key exists in the cache.
|
| + * Query whether a unique key exists in the cache.
|
| */
|
| - bool hasContentKey(const GrContentKey& contentKey) const {
|
| - return SkToBool(fContentHash.find(contentKey));
|
| + bool hasUniqueKey(const GrUniqueKey& key) const {
|
| + return SkToBool(fUniqueHash.find(key));
|
| }
|
|
|
| - /** Purges resources to become under budget and processes resources with invalidated content
|
| + /** Purges resources to become under budget and processes resources with invalidated unique
|
| keys. */
|
| void purgeAsNeeded() {
|
| - SkTArray<GrContentKeyInvalidatedMessage> invalidKeyMsgs;
|
| - fInvalidContentKeyInbox.poll(&invalidKeyMsgs);
|
| + SkTArray<GrUniqueKeyInvalidatedMessage> invalidKeyMsgs;
|
| + fInvalidUniqueKeyInbox.poll(&invalidKeyMsgs);
|
| if (invalidKeyMsgs.count()) {
|
| - this->processInvalidContentKeys(invalidKeyMsgs);
|
| + this->processInvalidUniqueKeys(invalidKeyMsgs);
|
| }
|
| if (fBudgetedCount <= fMaxCount && fBudgetedBytes <= fMaxBytes) {
|
| return;
|
| @@ -178,15 +179,15 @@ private:
|
| void removeResource(GrGpuResource*);
|
| void notifyPurgeable(GrGpuResource*);
|
| void didChangeGpuMemorySize(const GrGpuResource*, size_t oldSize);
|
| - bool didSetContentKey(GrGpuResource*);
|
| + bool didSetUniqueKey(GrGpuResource*);
|
| void willRemoveScratchKey(const GrGpuResource*);
|
| - void willRemoveContentKey(const GrGpuResource*);
|
| + void willRemoveUniqueKey(const GrGpuResource*);
|
| void didChangeBudgetStatus(GrGpuResource*);
|
| void refAndMakeResourceMRU(GrGpuResource*);
|
| /// @}
|
|
|
| void internalPurgeAsNeeded();
|
| - void processInvalidContentKeys(const SkTArray<GrContentKeyInvalidatedMessage>&);
|
| + void processInvalidUniqueKeys(const SkTArray<GrUniqueKeyInvalidatedMessage>&);
|
| void addToNonpurgeableArray(GrGpuResource*);
|
| void removeFromNonpurgeableArray(GrGpuResource*);
|
| bool overBudget() const { return fBudgetedBytes > fMaxBytes || fBudgetedCount > fMaxCount; }
|
| @@ -211,14 +212,12 @@ private:
|
| };
|
| typedef SkTMultiMap<GrGpuResource, GrScratchKey, ScratchMapTraits> ScratchMap;
|
|
|
| - struct ContentHashTraits {
|
| - static const GrContentKey& GetKey(const GrGpuResource& r) {
|
| - return r.getContentKey();
|
| - }
|
| + struct UniqueHashTraits {
|
| + static const GrUniqueKey& GetKey(const GrGpuResource& r) { return r.getUniqueKey(); }
|
|
|
| - static uint32_t Hash(const GrContentKey& key) { return key.hash(); }
|
| + static uint32_t Hash(const GrUniqueKey& key) { return key.hash(); }
|
| };
|
| - typedef SkTDynamicHash<GrGpuResource, GrContentKey, ContentHashTraits> ContentHash;
|
| + typedef SkTDynamicHash<GrGpuResource, GrUniqueKey, UniqueHashTraits> UniqueHash;
|
|
|
| static bool CompareTimestamp(GrGpuResource* const& a, GrGpuResource* const& b) {
|
| return a->cacheAccess().timestamp() < b->cacheAccess().timestamp();
|
| @@ -228,7 +227,7 @@ private:
|
| return res->cacheAccess().accessCacheIndex();
|
| }
|
|
|
| - typedef SkMessageBus<GrContentKeyInvalidatedMessage>::Inbox InvalidContentKeyInbox;
|
| + typedef SkMessageBus<GrUniqueKeyInvalidatedMessage>::Inbox InvalidUniqueKeyInbox;
|
| typedef SkTDPQueue<GrGpuResource*, CompareTimestamp, AccessResourceIndex> PurgeableQueue;
|
| typedef SkTDArray<GrGpuResource*> ResourceArray;
|
|
|
| @@ -241,8 +240,8 @@ private:
|
|
|
| // This map holds all resources that can be used as scratch resources.
|
| ScratchMap fScratchMap;
|
| - // This holds all resources that have content keys.
|
| - ContentHash fContentHash;
|
| + // This holds all resources that have unique keys.
|
| + UniqueHash fUniqueHash;
|
|
|
| // our budget, used in purgeAsNeeded()
|
| int fMaxCount;
|
| @@ -266,7 +265,7 @@ private:
|
| PFOverBudgetCB fOverBudgetCB;
|
| void* fOverBudgetData;
|
|
|
| - InvalidContentKeyInbox fInvalidContentKeyInbox;
|
| + InvalidUniqueKeyInbox fInvalidUniqueKeyInbox;
|
| };
|
|
|
| class GrResourceCache::ResourceAccess {
|
| @@ -298,20 +297,19 @@ private:
|
| }
|
|
|
| /**
|
| - * Called by GrGpuResources when their content keys change.
|
| + * Called by GrGpuResources when their unique keys change.
|
| *
|
| * This currently returns a bool and fails when an existing resource has a key that collides
|
| - * with the new content key. In the future it will null out the content key for the existing
|
| - * resource. The failure is a temporary measure taken because duties are split between two
|
| - * cache objects currently.
|
| + * with the new key. In the future it will null out the unique key for the existing resource.
|
| + * The failure is a temporary measure which will be fixed soon.
|
| */
|
| - bool didSetContentKey(GrGpuResource* resource) { return fCache->didSetContentKey(resource); }
|
| + bool didSetUniqueKey(GrGpuResource* resource) { return fCache->didSetUniqueKey(resource); }
|
|
|
| /**
|
| - * Called by a GrGpuResource when it removes its content key.
|
| + * Called by a GrGpuResource when it removes its unique key.
|
| */
|
| - void willRemoveContentKey(GrGpuResource* resource) {
|
| - return fCache->willRemoveContentKey(resource);
|
| + void willRemoveUniqueKey(GrGpuResource* resource) {
|
| + return fCache->willRemoveUniqueKey(resource);
|
| }
|
|
|
| /**
|
|
|