Merge "DisplayListCanvas: throw exception at attempt to draw bitmap with size > 100MB" into nyc-dev

This commit is contained in:
Sergei Vasilinetc
2016-04-26 21:39:42 +00:00
committed by Android (Google) Code Review
2 changed files with 13 additions and 1 deletions

View File

@@ -37,6 +37,8 @@ public class DisplayListCanvas extends Canvas {
// view hierarchy because display lists are generated recursively. // view hierarchy because display lists are generated recursively.
private static final int POOL_LIMIT = 25; private static final int POOL_LIMIT = 25;
private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB
private static final SynchronizedPool<DisplayListCanvas> sPool = private static final SynchronizedPool<DisplayListCanvas> sPool =
new SynchronizedPool<DisplayListCanvas>(POOL_LIMIT); new SynchronizedPool<DisplayListCanvas>(POOL_LIMIT);
@@ -249,4 +251,14 @@ public class DisplayListCanvas extends Canvas {
private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, private static native void nDrawRoundRect(long renderer, long propLeft, long propTop,
long propRight, long propBottom, long propRx, long propRy, long propPaint); long propRight, long propBottom, long propRx, long propRy, long propPaint);
@Override
protected void throwIfCannotDraw(Bitmap bitmap) {
super.throwIfCannotDraw(bitmap);
int bitmapSize = bitmap.getByteCount();
if (bitmapSize > MAX_BITMAP_SIZE) {
throw new RuntimeException(
"Canvas: trying to draw too large(" + bitmapSize + "bytes) bitmap.");
}
}
} }

View File

@@ -1266,7 +1266,7 @@ public class Canvas {
/** /**
* @hide * @hide
*/ */
protected static void throwIfCannotDraw(Bitmap bitmap) { protected void throwIfCannotDraw(Bitmap bitmap) {
if (bitmap.isRecycled()) { if (bitmap.isRecycled()) {
throw new RuntimeException("Canvas: trying to use a recycled bitmap " + bitmap); throw new RuntimeException("Canvas: trying to use a recycled bitmap " + bitmap);
} }