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

Unified Diff: src/gpu/GrResourceCache2.cpp

Issue 858123002: Add specialized content key class for resources. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove default template arg Created 5 years, 11 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/gpu/GrResourceCache2.h ('k') | src/gpu/GrStencilAndCoverPathRenderer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrResourceCache2.cpp
diff --git a/src/gpu/GrResourceCache2.cpp b/src/gpu/GrResourceCache2.cpp
index ba9d4d10162abf7d72c00c3b036eddf1452bcece..a63bda8cc7af14477a7b2c8d7ec0e21bd2c90708 100644
--- a/src/gpu/GrResourceCache2.cpp
+++ b/src/gpu/GrResourceCache2.cpp
@@ -19,7 +19,7 @@ DECLARE_SKMESSAGEBUS_MESSAGE(GrResourceInvalidatedMessage);
//////////////////////////////////////////////////////////////////////////////
GrScratchKey::ResourceType GrScratchKey::GenerateResourceType() {
- static int32_t gType = kInvalidResourceType + 1;
+ static int32_t gType = INHERITED::kInvalidDomain + 1;
int32_t type = sk_atomic_inc(&gType);
if (type > SK_MaxU16) {
@@ -29,15 +29,18 @@ GrScratchKey::ResourceType GrScratchKey::GenerateResourceType() {
return static_cast<ResourceType>(type);
}
+GrContentKey::Domain GrContentKey::GenerateDomain() {
+ static int32_t gDomain = INHERITED::kInvalidDomain + 1;
-void GrScratchKey::Builder::finish() {
- if (NULL == fKey) {
- return;
+ int32_t domain = sk_atomic_inc(&gDomain);
+ if (kInvalidDomain == gDomain) {
+ SkFAIL("Too many Content Key Domains");
}
- GR_STATIC_ASSERT(0 == kHash_MetaDataIdx);
- fKey->fKey[kHash_MetaDataIdx] =
- SkChecksum::Compute(&fKey->fKey[kHash_MetaDataIdx + 1], fKey->size() - sizeof(uint32_t));
- fKey = NULL;
+
+ return static_cast<Domain>(domain);
+}
+uint32_t GrResourceKeyHash(const uint32_t* data, size_t size) {
+ return SkChecksum::Compute(data, size);
}
//////////////////////////////////////////////////////////////////////////////
@@ -129,8 +132,8 @@ void GrResourceCache2::removeResource(GrGpuResource* resource) {
if (resource->cacheAccess().getScratchKey().isValid()) {
fScratchMap.remove(resource->cacheAccess().getScratchKey(), resource);
}
- if (const GrResourceKey* contentKey = resource->cacheAccess().getContentKey()) {
- fContentHash.remove(*contentKey);
+ if (resource->cacheAccess().getContentKey().isValid()) {
+ fContentHash.remove(resource->cacheAccess().getContentKey());
}
this->validate();
}
@@ -222,9 +225,9 @@ bool GrResourceCache2::didSetContentKey(GrGpuResource* resource) {
SkASSERT(!fPurging);
SkASSERT(resource);
SkASSERT(this->isInCache(resource));
- SkASSERT(resource->cacheAccess().getContentKey());
+ SkASSERT(resource->cacheAccess().getContentKey().isValid());
- GrGpuResource* res = fContentHash.find(*resource->cacheAccess().getContentKey());
+ GrGpuResource* res = fContentHash.find(resource->cacheAccess().getContentKey());
if (NULL != res) {
return false;
}
@@ -258,8 +261,8 @@ void GrResourceCache2::notifyPurgable(GrGpuResource* resource) {
bool overBudget = fBudgetedCount > fMaxCount || fBudgetedBytes > fMaxBytes;
// Also purge if the resource has neither a valid scratch key nor a content key.
- bool noKey = !resource->cacheAccess().isScratch() &&
- (NULL == resource->cacheAccess().getContentKey());
+ bool noKey = !resource->cacheAccess().getScratchKey().isValid() &&
+ !resource->cacheAccess().getContentKey().isValid();
// Only cached resources should ever have a key.
SkASSERT(noKey || resource->cacheAccess().isBudgeted());
@@ -406,20 +409,20 @@ void GrResourceCache2::validate() const {
}
if (resource->cacheAccess().isScratch()) {
- SkASSERT(NULL == resource->cacheAccess().getContentKey());
+ SkASSERT(!resource->cacheAccess().getContentKey().isValid());
++scratch;
SkASSERT(fScratchMap.countForKey(resource->cacheAccess().getScratchKey()));
SkASSERT(!resource->cacheAccess().isWrapped());
} else if (resource->cacheAccess().getScratchKey().isValid()) {
- SkASSERT(NULL != resource->cacheAccess().getContentKey());
+ SkASSERT(resource->cacheAccess().getContentKey().isValid());
++couldBeScratch;
SkASSERT(fScratchMap.countForKey(resource->cacheAccess().getScratchKey()));
SkASSERT(!resource->cacheAccess().isWrapped());
}
-
- if (const GrResourceKey* contentKey = resource->cacheAccess().getContentKey()) {
+ const GrContentKey& contentKey = resource->cacheAccess().getContentKey();
+ if (contentKey.isValid()) {
++content;
- SkASSERT(fContentHash.find(*contentKey) == resource);
+ SkASSERT(fContentHash.find(contentKey) == resource);
SkASSERT(!resource->cacheAccess().isWrapped());
}
« no previous file with comments | « src/gpu/GrResourceCache2.h ('k') | src/gpu/GrStencilAndCoverPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698