diff options
Diffstat (limited to 'libs/hwui/ResourceCache.cpp')
-rw-r--r-- | libs/hwui/ResourceCache.cpp | 58 |
1 files changed, 24 insertions, 34 deletions
diff --git a/libs/hwui/ResourceCache.cpp b/libs/hwui/ResourceCache.cpp index 20b8d6c..47c5d48 100644 --- a/libs/hwui/ResourceCache.cpp +++ b/libs/hwui/ResourceCache.cpp @@ -62,19 +62,16 @@ void ResourceCache::incrementRefcount(SkBitmap* bitmapResource) { incrementRefcount((void*)bitmapResource, kBitmap); } -void ResourceCache::incrementRefcount(SkMatrix* matrixResource) { - incrementRefcount((void*)matrixResource, kMatrix); -} - -void ResourceCache::incrementRefcount(SkPaint* paintResource) { - incrementRefcount((void*)paintResource, kPaint); -} - void ResourceCache::incrementRefcount(SkiaShader* shaderResource) { shaderResource->getSkShader()->safeRef(); incrementRefcount((void*)shaderResource, kShader); } +void ResourceCache::incrementRefcount(SkiaColorFilter* filterResource) { + filterResource->getSkColorFilter()->safeRef(); + incrementRefcount((void*)filterResource, kColorFilter); +} + void ResourceCache::decrementRefcount(void* resource) { ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL; if (ref == NULL) { @@ -98,6 +95,11 @@ void ResourceCache::decrementRefcount(SkiaShader* shaderResource) { decrementRefcount((void*)shaderResource); } +void ResourceCache::decrementRefcount(SkiaColorFilter* filterResource) { + filterResource->getSkColorFilter()->safeUnref(); + decrementRefcount((void*)filterResource); +} + void ResourceCache::recycle(SkBitmap* resource) { if (mCache->indexOfKey(resource) < 0) { // not tracking this resource; just recycle the pixel data @@ -136,24 +138,13 @@ void ResourceCache::destructor(SkBitmap* resource) { } } -void ResourceCache::destructor(SkMatrix* resource) { - ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL; - if (ref == NULL) { - // If we're not tracking this resource, just delete it - delete resource; - return; - } - ref->destroyed = true; - if (ref->refCount == 0) { - deleteResourceReference(resource, ref); - return; - } -} - -void ResourceCache::destructor(SkPaint* resource) { +void ResourceCache::destructor(SkiaShader* resource) { ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL; if (ref == NULL) { // If we're not tracking this resource, just delete it + if (Caches::hasInstance()) { + Caches::getInstance().gradientCache.remove(resource->getSkShader()); + } delete resource; return; } @@ -164,13 +155,10 @@ void ResourceCache::destructor(SkPaint* resource) { } } -void ResourceCache::destructor(SkiaShader* resource) { +void ResourceCache::destructor(SkiaColorFilter* resource) { ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL; if (ref == NULL) { // If we're not tracking this resource, just delete it - if (Caches::hasInstance()) { - Caches::getInstance().gradientCache.remove(resource->getSkShader()); - } delete resource; return; } @@ -196,19 +184,21 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete bitmap; } break; - case kMatrix: - delete (SkMatrix*) resource; - break; - case kPaint: - delete (SkPaint*) resource; - break; case kShader: + { SkiaShader* shader = (SkiaShader*)resource; if (Caches::hasInstance()) { Caches::getInstance().gradientCache.remove(shader->getSkShader()); } delete shader; - break; + } + break; + case kColorFilter: + { + SkiaColorFilter* filter = (SkiaColorFilter*)resource; + delete filter; + } + break; } } mCache->removeItem(resource); |