| Index: src/gpu/GrResourceCache2.cpp
|
| diff --git a/src/gpu/GrResourceCache2.cpp b/src/gpu/GrResourceCache2.cpp
|
| index 39181554d23705bc863e5f0ad4c3d0b1dc88dd77..ccfe382733fa94383c09bd48da8cef75bfe5a86b 100644
|
| --- a/src/gpu/GrResourceCache2.cpp
|
| +++ b/src/gpu/GrResourceCache2.cpp
|
| @@ -10,6 +10,7 @@
|
| #include "GrResourceCache2.h"
|
| #include "GrGpuResource.h"
|
|
|
| +#include "SkChecksum.h"
|
| #include "SkGr.h"
|
| #include "SkMessageBus.h"
|
|
|
| @@ -17,32 +18,26 @@ DECLARE_SKMESSAGEBUS_MESSAGE(GrResourceInvalidatedMessage);
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -GrResourceKey& GrResourceKey::NullScratchKey() {
|
| - static const GrCacheID::Key kBogusKey = { { {0} } };
|
| - static GrCacheID kBogusID(ScratchDomain(), kBogusKey);
|
| - static GrResourceKey kNullScratchKey(kBogusID, NoneResourceType(), 0);
|
| - return kNullScratchKey;
|
| -}
|
| +GrScratchKey::ResourceType GrScratchKey::GenerateResourceType() {
|
| + static int32_t gType = kInvalidResourceType + 1;
|
|
|
| -GrResourceKey::ResourceType GrResourceKey::NoneResourceType() {
|
| - static const ResourceType gNoneResourceType = GenerateResourceType();
|
| - return gNoneResourceType;
|
| -}
|
| + int32_t type = sk_atomic_inc(&gType);
|
| + if (kInvalidResourceType == type) {
|
| + SkFAIL("Too many Resource Types");
|
| + }
|
|
|
| -GrCacheID::Domain GrResourceKey::ScratchDomain() {
|
| - static const GrCacheID::Domain gDomain = GrCacheID::GenerateDomain();
|
| - return gDomain;
|
| + return static_cast<ResourceType>(type);
|
| }
|
|
|
| -GrResourceKey::ResourceType GrResourceKey::GenerateResourceType() {
|
| - static int32_t gNextType = 0;
|
|
|
| - int32_t type = sk_atomic_inc(&gNextType);
|
| - if (type >= (1 << 8 * sizeof(ResourceType))) {
|
| - SkFAIL("Too many Resource Types");
|
| +void GrScratchKey::Builder::finish() {
|
| + if (NULL == fKey) {
|
| + return;
|
| }
|
| -
|
| - return static_cast<ResourceType>(type);
|
| + GR_STATIC_ASSERT(0 == kHash_MetaDataIdx);
|
| + fKey->fKey[kHash_MetaDataIdx] =
|
| + SkChecksum::Compute(&fKey->fKey[kHash_MetaDataIdx + 1], fKey->size() - sizeof(uint32_t));
|
| + fKey = NULL;
|
| }
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
| @@ -111,7 +106,7 @@ void GrResourceCache2::insertResource(GrGpuResource* resource) {
|
| fBudgetedHighWaterBytes = SkTMax(fBudgetedBytes, fBudgetedHighWaterBytes);
|
| #endif
|
| }
|
| - if (!resource->cacheAccess().getScratchKey().isNullScratch()) {
|
| + if (resource->cacheAccess().getScratchKey().isValid()) {
|
| SkASSERT(!resource->cacheAccess().isWrapped());
|
| fScratchMap.insert(resource->cacheAccess().getScratchKey(), resource);
|
| }
|
| @@ -131,7 +126,7 @@ void GrResourceCache2::removeResource(GrGpuResource* resource) {
|
| }
|
|
|
| fResources.remove(resource);
|
| - if (!resource->cacheAccess().getScratchKey().isNullScratch()) {
|
| + if (resource->cacheAccess().getScratchKey().isValid()) {
|
| fScratchMap.remove(resource->cacheAccess().getScratchKey(), resource);
|
| }
|
| if (const GrResourceKey* contentKey = resource->cacheAccess().getContentKey()) {
|
| @@ -190,10 +185,10 @@ private:
|
| bool fRejectPendingIO;
|
| };
|
|
|
| -GrGpuResource* GrResourceCache2::findAndRefScratchResource(const GrResourceKey& scratchKey,
|
| +GrGpuResource* GrResourceCache2::findAndRefScratchResource(const GrScratchKey& scratchKey,
|
| uint32_t flags) {
|
| SkASSERT(!fPurging);
|
| - SkASSERT(scratchKey.isScratch());
|
| + SkASSERT(scratchKey.isValid());
|
|
|
| GrGpuResource* resource;
|
| if (flags & (kPreferNoPendingIO_ScratchFlag | kRequireNoPendingIO_ScratchFlag)) {
|
| @@ -228,7 +223,6 @@ bool GrResourceCache2::didSetContentKey(GrGpuResource* resource) {
|
| SkASSERT(resource);
|
| SkASSERT(this->isInCache(resource));
|
| SkASSERT(resource->cacheAccess().getContentKey());
|
| - SkASSERT(!resource->cacheAccess().getContentKey()->isScratch());
|
|
|
| GrGpuResource* res = fContentHash.find(*resource->cacheAccess().getContentKey());
|
| if (NULL != res) {
|
| @@ -414,7 +408,7 @@ void GrResourceCache2::validate() const {
|
| ++scratch;
|
| SkASSERT(fScratchMap.countForKey(resource->cacheAccess().getScratchKey()));
|
| SkASSERT(!resource->cacheAccess().isWrapped());
|
| - } else if (!resource->cacheAccess().getScratchKey().isNullScratch()) {
|
| + } else if (resource->cacheAccess().getScratchKey().isValid()) {
|
| SkASSERT(NULL != resource->cacheAccess().getContentKey());
|
| ++couldBeScratch;
|
| SkASSERT(fScratchMap.countForKey(resource->cacheAccess().getScratchKey()));
|
|
|