Remove unnecessary/erroneous reference counting
The SkBitmap* used by HWUI holds a reference to the PixelRef (which in turn holds the colorTable) so keeping an additional ref is not only unnecessary, but also potentially problematic. If a bitmap changes its pixelRef after it has been added to a displayList, then we end up with unbalanced ref/unref calls that cause the newly added PixelRef to be unref'd and prematurely deleted, while the original PixelRef is leaked. bug: 18659976 Change-Id: I34a06152e7bb2d733249a207dafd36b9b5dc0712
This commit is contained in:
@ -68,8 +68,6 @@ void ResourceCache::incrementRefcount(void* resource, ResourceType resourceType)
|
||||
}
|
||||
|
||||
void ResourceCache::incrementRefcount(const SkBitmap* bitmapResource) {
|
||||
bitmapResource->pixelRef()->globalRef();
|
||||
SkSafeRef(bitmapResource->getColorTable());
|
||||
incrementRefcount((void*) bitmapResource, kBitmap);
|
||||
}
|
||||
|
||||
@ -92,8 +90,6 @@ void ResourceCache::incrementRefcountLocked(void* resource, ResourceType resourc
|
||||
}
|
||||
|
||||
void ResourceCache::incrementRefcountLocked(const SkBitmap* bitmapResource) {
|
||||
bitmapResource->pixelRef()->globalRef();
|
||||
SkSafeRef(bitmapResource->getColorTable());
|
||||
incrementRefcountLocked((void*) bitmapResource, kBitmap);
|
||||
}
|
||||
|
||||
@ -111,8 +107,6 @@ void ResourceCache::decrementRefcount(void* resource) {
|
||||
}
|
||||
|
||||
void ResourceCache::decrementRefcount(const SkBitmap* bitmapResource) {
|
||||
bitmapResource->pixelRef()->globalUnref();
|
||||
SkSafeUnref(bitmapResource->getColorTable());
|
||||
decrementRefcount((void*) bitmapResource);
|
||||
}
|
||||
|
||||
@ -138,8 +132,6 @@ void ResourceCache::decrementRefcountLocked(void* resource) {
|
||||
}
|
||||
|
||||
void ResourceCache::decrementRefcountLocked(const SkBitmap* bitmapResource) {
|
||||
bitmapResource->pixelRef()->globalUnref();
|
||||
SkSafeUnref(bitmapResource->getColorTable());
|
||||
decrementRefcountLocked((void*) bitmapResource);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user