Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee648e51 authored by Derek Sollenberger's avatar Derek Sollenberger
Browse files

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
parent cdcabe4c
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -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);
}