From 9a52bad40ab96a58bc817fbfe1145a6766d75940 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Sun, 1 Nov 2015 22:57:53 +0100 Subject: android: don't crash in TextureReaper when Integer is null Change-Id: I1514aa7a3fbab682b0d282ba0f504470943d7e4a --- .../java/org/mozilla/gecko/gfx/TextureReaper.java | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/android/source/src/java/org/mozilla/gecko/gfx/TextureReaper.java b/android/source/src/java/org/mozilla/gecko/gfx/TextureReaper.java index 3063e5bf8412..1a8a50459774 100644 --- a/android/source/src/java/org/mozilla/gecko/gfx/TextureReaper.java +++ b/android/source/src/java/org/mozilla/gecko/gfx/TextureReaper.java @@ -6,6 +6,7 @@ package org.mozilla.gecko.gfx; import android.opengl.GLES20; +import android.util.Log; import java.util.ArrayList; @@ -14,28 +15,30 @@ import java.util.ArrayList; */ public class TextureReaper { private static TextureReaper sSharedInstance; - private ArrayList mDeadTextureIDs; + private ArrayList mDeadTextureIDs = new ArrayList(); + private static final String LOGTAG = TextureReaper.class.getSimpleName(); private TextureReaper() { - mDeadTextureIDs = new ArrayList(); } public static TextureReaper get() { - if (sSharedInstance == null) + if (sSharedInstance == null) { sSharedInstance = new TextureReaper(); + } return sSharedInstance; } public void add(int[] textureIDs) { - for (int textureID : textureIDs) + for (int textureID : textureIDs) { add(textureID); + } } - public void add(int textureID) { + public synchronized void add(int textureID) { mDeadTextureIDs.add(textureID); } - public void reap() { + public synchronized void reap() { int numTextures = mDeadTextureIDs.size(); // Adreno 200 will generate INVALID_VALUE if len == 0 is passed to glDeleteTextures, // even though it's not supposed to. @@ -44,7 +47,13 @@ public class TextureReaper { int[] deadTextureIDs = new int[numTextures]; for (int i = 0; i < numTextures; i++) { - deadTextureIDs[i] = mDeadTextureIDs.get(i); + Integer id = mDeadTextureIDs.get(i); + if (id == null) { + deadTextureIDs[i] = 0; + Log.e(LOGTAG, "Dead texture id is null"); + } else { + deadTextureIDs[i] = mDeadTextureIDs.get(i); + } } mDeadTextureIDs.clear(); -- cgit