diff options
author | bsalomon <bsalomon@google.com> | 2014-11-14 13:33:09 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-14 13:33:09 -0800 |
commit | 12299ab7a1be5f4b99284ecf289d46107ef0a946 (patch) | |
tree | 975b65e8d15cb7c7a6ffc3f1b2b820b4b0da978d /src/gpu/GrGpuResource.cpp | |
parent | 85588344c3ef43768e27881f71079edb372119b5 (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.cpp | 34 |
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); } } |