Loading libs/hwui/PatchCache.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,11 @@ void PatchCache::clearGarbage() { Mutex::Autolock _l(mLock); size_t count = mGarbage.size(); for (size_t i = 0; i < count; i++) { remove(patchesToRemove, mGarbage[i]); Res_png_9patch* patch = mGarbage[i]; remove(patchesToRemove, patch); // A Res_png_9patch is actually an array of byte that's larger // than sizeof(Res_png_9patch). It must be freed as an array. delete[] (int8_t*) patch; } mGarbage.clear(); } Loading libs/hwui/PathCache.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -395,7 +395,9 @@ void PathCache::clearGarbage() { Mutex::Autolock l(mLock); size_t count = mGarbage.size(); for (size_t i = 0; i < count; i++) { remove(pathsToRemove, mGarbage.itemAt(i)); const path_pair_t& pair = mGarbage.itemAt(i); remove(pathsToRemove, pair); delete pair.getFirst(); } mGarbage.clear(); } Loading libs/hwui/ResourceCache.cpp +18 −12 Original line number Diff line number Diff line Loading @@ -213,8 +213,9 @@ void ResourceCache::destructorLocked(SkPath* resource) { // If we're not tracking this resource, just delete it if (Caches::hasInstance()) { Caches::getInstance().pathCache.removeDeferred(resource); } } else { delete resource; } return; } ref->destroyed = true; Loading @@ -235,8 +236,9 @@ void ResourceCache::destructorLocked(SkBitmap* resource) { // If we're not tracking this resource, just delete it if (Caches::hasInstance()) { Caches::getInstance().textureCache.removeDeferred(resource); } } else { delete resource; } return; } ref->destroyed = true; Loading Loading @@ -292,13 +294,14 @@ void ResourceCache::destructorLocked(Res_png_9patch* resource) { ssize_t index = mCache->indexOfKey(resource); ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; if (ref == NULL) { // If we're not tracking this resource, just delete it if (Caches::hasInstance()) { Caches::getInstance().patchCache.removeDeferred(resource); } // If we're not tracking this resource, just delete it } else { // A Res_png_9patch is actually an array of byte that's larger // than sizeof(Res_png_9patch). It must be freed as an array. delete[] (int8_t*) resource; } return; } ref->destroyed = true; Loading Loading @@ -355,17 +358,19 @@ void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceRefere SkBitmap* bitmap = (SkBitmap*) resource; if (Caches::hasInstance()) { Caches::getInstance().textureCache.removeDeferred(bitmap); } } else { delete bitmap; } } break; case kPath: { SkPath* path = (SkPath*) resource; if (Caches::hasInstance()) { Caches::getInstance().pathCache.removeDeferred(path); } } else { delete path; } } break; case kShader: { SkiaShader* shader = (SkiaShader*) resource; Loading @@ -380,12 +385,13 @@ void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceRefere case kNinePatch: { if (Caches::hasInstance()) { Caches::getInstance().patchCache.removeDeferred((Res_png_9patch*) resource); } } else { // A Res_png_9patch is actually an array of byte that's larger // than sizeof(Res_png_9patch). It must be freed as an array. int8_t* patch = (int8_t*) resource; delete[] patch; } } break; case kLayer: { Layer* layer = (Layer*) resource; Loading libs/hwui/TextureCache.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,9 @@ void TextureCache::clearGarbage() { Mutex::Autolock _l(mLock); size_t count = mGarbage.size(); for (size_t i = 0; i < count; i++) { mCache.remove(mGarbage.itemAt(i)); const SkBitmap* bitmap = mGarbage.itemAt(i); mCache.remove(bitmap); delete bitmap; } mGarbage.clear(); } Loading Loading
libs/hwui/PatchCache.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,11 @@ void PatchCache::clearGarbage() { Mutex::Autolock _l(mLock); size_t count = mGarbage.size(); for (size_t i = 0; i < count; i++) { remove(patchesToRemove, mGarbage[i]); Res_png_9patch* patch = mGarbage[i]; remove(patchesToRemove, patch); // A Res_png_9patch is actually an array of byte that's larger // than sizeof(Res_png_9patch). It must be freed as an array. delete[] (int8_t*) patch; } mGarbage.clear(); } Loading
libs/hwui/PathCache.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -395,7 +395,9 @@ void PathCache::clearGarbage() { Mutex::Autolock l(mLock); size_t count = mGarbage.size(); for (size_t i = 0; i < count; i++) { remove(pathsToRemove, mGarbage.itemAt(i)); const path_pair_t& pair = mGarbage.itemAt(i); remove(pathsToRemove, pair); delete pair.getFirst(); } mGarbage.clear(); } Loading
libs/hwui/ResourceCache.cpp +18 −12 Original line number Diff line number Diff line Loading @@ -213,8 +213,9 @@ void ResourceCache::destructorLocked(SkPath* resource) { // If we're not tracking this resource, just delete it if (Caches::hasInstance()) { Caches::getInstance().pathCache.removeDeferred(resource); } } else { delete resource; } return; } ref->destroyed = true; Loading @@ -235,8 +236,9 @@ void ResourceCache::destructorLocked(SkBitmap* resource) { // If we're not tracking this resource, just delete it if (Caches::hasInstance()) { Caches::getInstance().textureCache.removeDeferred(resource); } } else { delete resource; } return; } ref->destroyed = true; Loading Loading @@ -292,13 +294,14 @@ void ResourceCache::destructorLocked(Res_png_9patch* resource) { ssize_t index = mCache->indexOfKey(resource); ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; if (ref == NULL) { // If we're not tracking this resource, just delete it if (Caches::hasInstance()) { Caches::getInstance().patchCache.removeDeferred(resource); } // If we're not tracking this resource, just delete it } else { // A Res_png_9patch is actually an array of byte that's larger // than sizeof(Res_png_9patch). It must be freed as an array. delete[] (int8_t*) resource; } return; } ref->destroyed = true; Loading Loading @@ -355,17 +358,19 @@ void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceRefere SkBitmap* bitmap = (SkBitmap*) resource; if (Caches::hasInstance()) { Caches::getInstance().textureCache.removeDeferred(bitmap); } } else { delete bitmap; } } break; case kPath: { SkPath* path = (SkPath*) resource; if (Caches::hasInstance()) { Caches::getInstance().pathCache.removeDeferred(path); } } else { delete path; } } break; case kShader: { SkiaShader* shader = (SkiaShader*) resource; Loading @@ -380,12 +385,13 @@ void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceRefere case kNinePatch: { if (Caches::hasInstance()) { Caches::getInstance().patchCache.removeDeferred((Res_png_9patch*) resource); } } else { // A Res_png_9patch is actually an array of byte that's larger // than sizeof(Res_png_9patch). It must be freed as an array. int8_t* patch = (int8_t*) resource; delete[] patch; } } break; case kLayer: { Layer* layer = (Layer*) resource; Loading
libs/hwui/TextureCache.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,9 @@ void TextureCache::clearGarbage() { Mutex::Autolock _l(mLock); size_t count = mGarbage.size(); for (size_t i = 0; i < count; i++) { mCache.remove(mGarbage.itemAt(i)); const SkBitmap* bitmap = mGarbage.itemAt(i); mCache.remove(bitmap); delete bitmap; } mGarbage.clear(); } Loading