diff --git a/graphics/java/android/graphics/RecordingCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java index 4242ead0e4dfb..88b32c867f363 100644 --- a/graphics/java/android/graphics/RecordingCanvas.java +++ b/graphics/java/android/graphics/RecordingCanvas.java @@ -39,6 +39,8 @@ public final class RecordingCanvas extends BaseRecordingCanvas { // view hierarchy because display lists are generated recursively. private static final int POOL_LIMIT = 25; + private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB + private static final SynchronizedPool sPool = new SynchronizedPool<>(POOL_LIMIT); @@ -260,6 +262,18 @@ public final class RecordingCanvas extends BaseRecordingCanvas { paint.getNativeContainer()); } + /** @hide */ + @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."); + } + } + + // ------------------ Fast JNI ------------------------ @FastNative