Merge "Don't recycle bitmaps we don't own" into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-07-18 20:08:58 +00:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 3 deletions

View File

@@ -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);
}

View File

@@ -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());
}
}