summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/GLES20Canvas.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view/GLES20Canvas.java')
-rw-r--r--core/java/android/view/GLES20Canvas.java23
1 files changed, 16 insertions, 7 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 4c72e95..b058685 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -44,7 +44,7 @@ class GLES20Canvas extends Canvas {
@SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
private final GL mGl;
private final boolean mOpaque;
- private final int mRenderer;
+ private int mRenderer;
private int mWidth;
private int mHeight;
@@ -76,16 +76,25 @@ class GLES20Canvas extends Canvas {
mOpaque = !translucent;
mRenderer = nCreateRenderer();
+ if (mRenderer == 0) {
+ throw new IllegalStateException("Could not create GLES20Canvas renderer");
+ }
}
-
+
private native int nCreateRenderer();
- @Override
- protected void finalize() throws Throwable {
- try {
- super.finalize();
- } finally {
+ /**
+ * This method <strong>must</strong> be called before releasing a
+ * reference to a GLES20Canvas. This method is responsible for freeing
+ * native resources associated with the hardware. Not invoking this
+ * method properly can result in memory leaks.
+ *
+ * @hide
+ */
+ public synchronized void destroy() {
+ if (mRenderer != 0) {
nDestroyRenderer(mRenderer);
+ mRenderer = 0;
}
}