Index: android_webview/java/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java b/android_webview/java/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java |
index d4e79c82254e6fd7d9471c49156913afbf9f2f78..7abf59c380b0107e5693bbb41422f3d413b2d570 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java |
+++ b/android_webview/java/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java |
@@ -11,6 +11,9 @@ import android.graphics.Picture; |
import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
+import org.chromium.content.common.TraceEvent; |
+ |
+import java.lang.ref.SoftReference; |
/** |
* Provides auxiliary methods related to Picture objects and native SkPictures. |
@@ -18,12 +21,29 @@ import org.chromium.base.JNINamespace; |
@JNINamespace("android_webview") |
public class JavaBrowserViewRendererHelper { |
+ private static SoftReference<Bitmap> sCachedBitmap; |
+ |
/** |
* Provides a Bitmap object with a given width and height used for auxiliary rasterization. |
*/ |
@CalledByNative |
- private static Bitmap createBitmap(int width, int height) { |
- return Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); |
+ private static Bitmap createBitmap(int width, int height, boolean cacheResult) { |
+ if (cacheResult && sCachedBitmap != null) { |
+ Bitmap result = sCachedBitmap.get(); |
+ if (result != null) { |
+ if (result.getWidth() == width && result.getHeight() == height) { |
+ TraceEvent.instant("Reused cached bitmap"); |
+ return result; |
+ } |
+ result.recycle(); |
+ } |
+ sCachedBitmap = null; |
+ } |
+ Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); |
+ if (cacheResult) { |
+ sCachedBitmap = new SoftReference<Bitmap>(result); |
+ } |
+ return result; |
} |
/** |