aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrGpuResource.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2014-11-14 13:33:09 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-11-14 13:33:09 -0800
commit12299ab7a1be5f4b99284ecf289d46107ef0a946 (patch)
tree975b65e8d15cb7c7a6ffc3f1b2b820b4b0da978d /src/gpu/GrGpuResource.cpp
parent85588344c3ef43768e27881f71079edb372119b5 (diff)
Make GrResourceCache2 responsible for calling release, abandon, and ~.
BUG=skia:2889 TBR=robertphillips@google.com NOTRY=true Review URL: https://codereview.chromium.org/729683002
Diffstat (limited to 'src/gpu/GrGpuResource.cpp')
-rw-r--r--src/gpu/GrGpuResource.cpp34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/gpu/GrGpuResource.cpp b/src/gpu/GrGpuResource.cpp
index be8ea0daf0..fcc5f4de50 100644
--- a/src/gpu/GrGpuResource.cpp
+++ b/src/gpu/GrGpuResource.cpp
@@ -36,26 +36,24 @@ void GrGpuResource::registerWithCache() {
}
GrGpuResource::~GrGpuResource() {
- // subclass should have released this.
+ // The cache should have released or destroyed this resource.
SkASSERT(this->wasDestroyed());
}
void GrGpuResource::release() {
- if (fGpu) {
- this->onRelease();
- get_resource_cache2(fGpu)->resourceAccess().removeResource(this);
- fGpu = NULL;
- fGpuMemorySize = 0;
- }
+ SkASSERT(fGpu);
+ this->onRelease();
+ get_resource_cache2(fGpu)->resourceAccess().removeResource(this);
+ fGpu = NULL;
+ fGpuMemorySize = 0;
}
void GrGpuResource::abandon() {
- if (fGpu) {
- this->onAbandon();
- get_resource_cache2(fGpu)->resourceAccess().removeResource(this);
- fGpu = NULL;
- fGpuMemorySize = 0;
- }
+ SkASSERT(fGpu);
+ this->onAbandon();
+ get_resource_cache2(fGpu)->resourceAccess().removeResource(this);
+ fGpu = NULL;
+ fGpuMemorySize = 0;
}
const GrContext* GrGpuResource::getContext() const {
@@ -90,7 +88,7 @@ bool GrGpuResource::setContentKey(const GrResourceKey& contentKey) {
SkASSERT(!contentKey.isScratch());
SkASSERT(this->internalHasRef());
- if (fContentKeySet) {
+ if (fContentKeySet || this->wasDestroyed()) {
return false;
}
@@ -105,8 +103,12 @@ bool GrGpuResource::setContentKey(const GrResourceKey& contentKey) {
}
void GrGpuResource::notifyIsPurgable() const {
- if (!this->wasDestroyed()) {
- get_resource_cache2(fGpu)->resourceAccess().notifyPurgable(this);
+ if (this->wasDestroyed()) {
+ // We've already been removed from the cache. Goodbye cruel world!
+ SkDELETE(this);
+ } else {
+ GrGpuResource* mutableThis = const_cast<GrGpuResource*>(this);
+ get_resource_cache2(fGpu)->resourceAccess().notifyPurgable(mutableThis);
}
}