Index: src/gpu/GrGpuResource.cpp |
diff --git a/src/gpu/GrGpuResource.cpp b/src/gpu/GrGpuResource.cpp |
index b77acffc68c69599a8f58ac910b86c7134832aae..87c7349246aca003fb8cc86985e74d2a304e325d 100644 |
--- a/src/gpu/GrGpuResource.cpp |
+++ b/src/gpu/GrGpuResource.cpp |
@@ -29,7 +29,8 @@ GrGpuResource::GrGpuResource(GrGpu* gpu, bool isWrapped) |
: fGpu(gpu) |
, fCacheEntry(NULL) |
, fUniqueID(CreateUniqueID()) |
- , fScratchKey(GrResourceKey::NullScratchKey()) { |
+ , fScratchKey(GrResourceKey::NullScratchKey()) |
+ , fContentKeySet(false) { |
if (isWrapped) { |
fFlags = kWrapped_FlagBit; |
} else { |
@@ -78,24 +79,32 @@ GrContext* GrGpuResource::getContext() { |
} |
} |
-bool GrGpuResource::setCacheEntry(GrResourceCacheEntry* cacheEntry) { |
- // GrResourceCache never changes the cacheEntry once one has been added. |
- SkASSERT(NULL == cacheEntry || NULL == fCacheEntry); |
- |
- fCacheEntry = cacheEntry; |
- if (this->wasDestroyed() || NULL == cacheEntry) { |
- return true; |
+bool GrGpuResource::setContentKey(const GrResourceKey& contentKey) { |
+ SkASSERT(!contentKey.isScratch()); |
+ // Currently this can only be called once and can't be called when the resource is scratch. |
+ SkASSERT(this->internalHasRef()); |
+ SkASSERT(!this->internalHasPendingIO()); |
+ |
+ if (fContentKeySet) { |
robertphillips
2014/11/11 15:04:44
Assert in here?
bsalomon
2014/11/11 15:17:22
Unit tests exercise this behavior.
|
+ return false; |
} |
- if (!cacheEntry->key().isScratch()) { |
- if (!get_resource_cache2(fGpu)->didAddContentKey(this)) { |
- fCacheEntry = NULL; |
- return false; |
- } |
+ fContentKey = contentKey; |
+ fContentKeySet = true; |
+ |
+ if (!get_resource_cache2(fGpu)->didSetContentKey(this)) { |
+ fContentKeySet = false; |
+ return false; |
} |
return true; |
} |
+void GrGpuResource::setCacheEntry(GrResourceCacheEntry* cacheEntry) { |
+ // GrResourceCache never changes the cacheEntry once one has been added. |
+ SkASSERT(NULL == cacheEntry || NULL == fCacheEntry); |
+ fCacheEntry = cacheEntry; |
+} |
+ |
void GrGpuResource::notifyIsPurgable() const { |
if (fCacheEntry && !this->wasDestroyed()) { |
get_resource_cache(fGpu)->notifyPurgable(this); |
@@ -110,9 +119,8 @@ void GrGpuResource::setScratchKey(const GrResourceKey& scratchKey) { |
} |
const GrResourceKey* GrGpuResource::getContentKey() const { |
- // Currently scratch resources have a cache entry in GrResourceCache with a scratch key. |
- if (fCacheEntry && !fCacheEntry->key().isScratch()) { |
- return &fCacheEntry->key(); |
+ if (fContentKeySet) { |
+ return &fContentKey; |
} |
return NULL; |
} |