From aa31944d5d16630434fe90bd5c38af81a86902d6 Mon Sep 17 00:00:00 2001 From: Leon Scroggins III Date: Tue, 19 May 2020 12:01:02 -0400 Subject: [PATCH] Restore MAX_BITMAP_SIZE Test: make This partially reverts 7648ccaa3b2ff2f058bd9909d1ecc1e8049bc5be (I141d6d79520871df1a3c2a9267ec872a8314ffdb). Restore RecordingCanvas' MAX_BITMAP_SIZE and throwIfCannotDraw. Although it's possible to draw a bigger Bitmap, it is likely a bug on the part of the app developer and will likely lead to other (potentially hard to diagnose) problems due to using so much memory. Make the restored version of MAX_BITMAP_SIZE private, so that it won't be accessed outside the module. Change-Id: Ia82c9f05b0b01960915a34e06e046447ab38854e --- .../java/android/graphics/RecordingCanvas.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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