Merge "Don't recycle bitmaps we don't own" into oc-dr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bc907cf9a8
@@ -136,12 +136,12 @@ public final class WallpaperColors implements Parcelable {
|
||||
}
|
||||
|
||||
final int bitmapArea = bitmap.getWidth() * bitmap.getHeight();
|
||||
boolean shouldRecycle = false;
|
||||
if (bitmapArea > MAX_WALLPAPER_EXTRACTION_AREA) {
|
||||
shouldRecycle = true;
|
||||
Size optimalSize = calculateOptimalSize(bitmap.getWidth(), bitmap.getHeight());
|
||||
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, optimalSize.getWidth(),
|
||||
bitmap = Bitmap.createScaledBitmap(bitmap, optimalSize.getWidth(),
|
||||
optimalSize.getHeight(), true /* filter */);
|
||||
bitmap.recycle();
|
||||
bitmap = scaledBitmap;
|
||||
}
|
||||
|
||||
final Palette palette = Palette
|
||||
@@ -181,6 +181,11 @@ public final class WallpaperColors implements Parcelable {
|
||||
}
|
||||
|
||||
int hints = calculateHints(bitmap);
|
||||
|
||||
if (shouldRecycle) {
|
||||
bitmap.recycle();
|
||||
}
|
||||
|
||||
return new WallpaperColors(primary, secondary, tertiary, hints);
|
||||
}
|
||||
|
||||
|
||||
@@ -77,4 +77,16 @@ public class WallpaperColorsTest {
|
||||
Assert.assertFalse("Light surface shouldn't support dark text "
|
||||
+ "when it contains dark pixels", supportsDarkText);
|
||||
}
|
||||
|
||||
/**
|
||||
* WallpaperColors should not recycle bitmaps that it didn't create.
|
||||
*/
|
||||
@Test
|
||||
public void wallpaperRecycleBitmapTest() {
|
||||
Bitmap image = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);
|
||||
WallpaperColors.fromBitmap(image);
|
||||
Canvas canvas = new Canvas();
|
||||
// This would crash:
|
||||
canvas.drawBitmap(image, 0, 0, new Paint());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user