Bug 1435499 - Guard against OOM when getting toolbar pixels; r?rbarker draft
authorJim Chen <nchen@mozilla.com>
Thu, 08 Feb 2018 13:23:35 -0500
changeset 752639 e86f88b7803636a627cc0512422b1120fee9fa66
parent 750207 a23212941fcd1d8ecc2862cc139dfcbb7f029aa2
push id98331
push userbmo:nchen@mozilla.com
push dateThu, 08 Feb 2018 18:23:52 +0000
reviewersrbarker
bugs1435499
milestone60.0a1
Bug 1435499 - Guard against OOM when getting toolbar pixels; r?rbarker Guard against OOM errors when getting toolbar pixels, and send a failure message back to compositor when OOM happens. MozReview-Commit-ID: FooZlE979DD
mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/DynamicToolbarAnimator.java
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/DynamicToolbarAnimator.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/DynamicToolbarAnimator.java
@@ -158,25 +158,27 @@ public final class DynamicToolbarAnimato
                 // Send updated toolbar image to compositor.
                 final Bitmap bm = mToolbarChromeProxy.getBitmapOfToolbarChrome();
                 if (bm == null) {
                     mCompositor.sendToolbarAnimatorMessage(
                             LayerSession.TOOLBAR_SNAPSHOT_FAILED);
                     break;
                 }
 
-                final int width = bm.getWidth();
-                final int height = bm.getHeight();
-                final int[] pixels = new int[bm.getByteCount() / 4];
                 try {
+                    final int width = bm.getWidth();
+                    final int height = bm.getHeight();
+                    final int[] pixels = new int[bm.getByteCount() / 4];
                     bm.getPixels(pixels, /* offset */ 0, /* stride */ width,
                                  /* x */ 0, /* y */ 0, width, height);
                     mCompositor.sendToolbarPixelsToCompositor(width, height, pixels);
-                } catch (final Exception e) {
+                } catch (final Throwable e) {
                     Log.e(LOGTAG, "Cannot get toolbar pixels", e);
+                    mCompositor.sendToolbarAnimatorMessage(
+                            LayerSession.TOOLBAR_SNAPSHOT_FAILED);
                 }
                 break;
             }
 
             case LayerSession.STATIC_TOOLBAR_READY: {
                 // Hide toolbar and send TOOLBAR_HIDDEN message to compositor
                 mToolbarChromeProxy.toggleToolbarChrome(false);
                 mCompositor.sendToolbarAnimatorMessage(LayerSession.TOOLBAR_HIDDEN);