Loading libs/hwui/Layer.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,13 @@ Layer::~Layer() { deleteTexture(); } void Layer::freeResourcesLocked() { if (colorFilter) { Caches::getInstance().resourceCache.decrementRefcountLocked(colorFilter); colorFilter = NULL; } } void Layer::setPaint(SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); } Loading libs/hwui/Layer.h +2 −1 Original line number Diff line number Diff line Loading @@ -45,10 +45,11 @@ class DisplayList; * A layer has dimensions and is backed by an OpenGL texture or FBO. */ struct Layer { Layer(const uint32_t layerWidth, const uint32_t layerHeight); ~Layer(); void freeResourcesLocked(); /** * Sets this layer's region to a rectangle. Computes the appropriate * texture coordinates. Loading libs/hwui/ResourceCache.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -155,7 +155,7 @@ void ResourceCache::decrementRefcountLocked(void* resource) { } ref->refCount--; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading Loading @@ -201,7 +201,7 @@ void ResourceCache::destructorLocked(SkPath* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -223,7 +223,7 @@ void ResourceCache::destructorLocked(SkBitmap* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -242,7 +242,7 @@ void ResourceCache::destructorLocked(SkiaShader* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -261,7 +261,7 @@ void ResourceCache::destructorLocked(SkiaColorFilter* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -284,7 +284,7 @@ void ResourceCache::recycleLocked(SkBitmap* resource) { } ref->recycled = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -292,7 +292,7 @@ void ResourceCache::recycleLocked(SkBitmap* resource) { * This method should only be called while the mLock mutex is held (that mutex is grabbed * by the various destructor() and recycle() methods which call this method). */ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* ref) { void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceReference* ref) { if (ref->recycled && ref->resourceType == kBitmap) { ((SkBitmap*) resource)->setPixels(NULL, NULL); } Loading Loading @@ -326,6 +326,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r break; case kLayer: { Layer* layer = (Layer*) resource; layer->freeResourcesLocked(); delete layer; } break; Loading libs/hwui/ResourceCache.h +1 −1 Original line number Diff line number Diff line Loading @@ -103,7 +103,7 @@ public: void recycleLocked(SkBitmap* resource); private: void deleteResourceReference(void* resource, ResourceReference* ref); void deleteResourceReferenceLocked(void* resource, ResourceReference* ref); void incrementRefcount(void* resource, ResourceType resourceType); void incrementRefcountLocked(void* resource, ResourceType resourceType); Loading Loading
libs/hwui/Layer.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,13 @@ Layer::~Layer() { deleteTexture(); } void Layer::freeResourcesLocked() { if (colorFilter) { Caches::getInstance().resourceCache.decrementRefcountLocked(colorFilter); colorFilter = NULL; } } void Layer::setPaint(SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); } Loading
libs/hwui/Layer.h +2 −1 Original line number Diff line number Diff line Loading @@ -45,10 +45,11 @@ class DisplayList; * A layer has dimensions and is backed by an OpenGL texture or FBO. */ struct Layer { Layer(const uint32_t layerWidth, const uint32_t layerHeight); ~Layer(); void freeResourcesLocked(); /** * Sets this layer's region to a rectangle. Computes the appropriate * texture coordinates. Loading
libs/hwui/ResourceCache.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -155,7 +155,7 @@ void ResourceCache::decrementRefcountLocked(void* resource) { } ref->refCount--; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading Loading @@ -201,7 +201,7 @@ void ResourceCache::destructorLocked(SkPath* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -223,7 +223,7 @@ void ResourceCache::destructorLocked(SkBitmap* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -242,7 +242,7 @@ void ResourceCache::destructorLocked(SkiaShader* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -261,7 +261,7 @@ void ResourceCache::destructorLocked(SkiaColorFilter* resource) { } ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -284,7 +284,7 @@ void ResourceCache::recycleLocked(SkBitmap* resource) { } ref->recycled = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); deleteResourceReferenceLocked(resource, ref); } } Loading @@ -292,7 +292,7 @@ void ResourceCache::recycleLocked(SkBitmap* resource) { * This method should only be called while the mLock mutex is held (that mutex is grabbed * by the various destructor() and recycle() methods which call this method). */ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* ref) { void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceReference* ref) { if (ref->recycled && ref->resourceType == kBitmap) { ((SkBitmap*) resource)->setPixels(NULL, NULL); } Loading Loading @@ -326,6 +326,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r break; case kLayer: { Layer* layer = (Layer*) resource; layer->freeResourcesLocked(); delete layer; } break; Loading
libs/hwui/ResourceCache.h +1 −1 Original line number Diff line number Diff line Loading @@ -103,7 +103,7 @@ public: void recycleLocked(SkBitmap* resource); private: void deleteResourceReference(void* resource, ResourceReference* ref); void deleteResourceReferenceLocked(void* resource, ResourceReference* ref); void incrementRefcount(void* resource, ResourceType resourceType); void incrementRefcountLocked(void* resource, ResourceType resourceType); Loading