aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/wallpapers/photophase/effects
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2014-08-31 16:44:41 +0200
committerJorge Ruesga <jorge@ruesga.com>2014-08-31 16:44:41 +0200
commitc8d004f3be2bc071184dd32e17b87efccb3aca38 (patch)
treea500c6260b77454bf7a07b36dc14695d3c8770f2 /src/org/cyanogenmod/wallpapers/photophase/effects
parenta523e7f3384fbab9cc398e2fd398bda8fc13663b (diff)
downloadandroid_packages_wallpapers_PhotoPhase-c8d004f3be2bc071184dd32e17b87efccb3aca38.tar.gz
android_packages_wallpapers_PhotoPhase-c8d004f3be2bc071184dd32e17b87efccb3aca38.tar.bz2
android_packages_wallpapers_PhotoPhase-c8d004f3be2bc071184dd32e17b87efccb3aca38.zip
photophase: fix memory leaks
* Fix memory leak caused by unreleased of framebuffers new refs * pre-cache Roboto typeface * trace allocations/deallocations GL's resources Change-Id: Ib1ca22aae7ba90c4282f91dcef69a5fe274017a8 Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Diffstat (limited to 'src/org/cyanogenmod/wallpapers/photophase/effects')
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java
index 0b3c5fc..0900322 100644
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java
+++ b/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java
@@ -21,6 +21,7 @@ import android.media.effect.EffectContext;
import android.media.effect.EffectFactory;
import android.opengl.GLES20;
import android.opengl.GLUtils;
+import android.util.Log;
import org.cyanogenmod.wallpapers.photophase.utils.GLESUtil;
@@ -138,11 +139,14 @@ public abstract class PhotoPhaseEffect extends Effect {
// Save the GLES state
saveGLState();
+ int[] fb = new int[1];
try {
// Create a framebuffer object and call the effect apply method to draw the effect
- int[] fb = new int[1];
GLES20.glGenFramebuffers(1, fb, 0);
GLESUtil.glesCheckError("glGenFramebuffers");
+ if (GLESUtil.DEBUG_GL_MEMOBJS) {
+ Log.d(GLESUtil.DEBUG_GL_MEMOBJS_NEW_TAG, "glGenFramebuffers: " + fb[0]);
+ }
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);
GLESUtil.glesCheckError("glBindFramebuffer");
@@ -171,6 +175,13 @@ public abstract class PhotoPhaseEffect extends Effect {
} finally {
// Restore the GLES state
restoreGLState();
+
+ // Clean framebuffer memory
+ if (GLESUtil.DEBUG_GL_MEMOBJS) {
+ Log.d(GLESUtil.DEBUG_GL_MEMOBJS_DEL_TAG, "glDeleteFramebuffers: " + fb[0]);
+ }
+ GLES20.glDeleteFramebuffers(1, fb, 0);
+ GLESUtil.glesCheckError("glDeleteFramebuffers");
}
}
@@ -189,6 +200,9 @@ public abstract class PhotoPhaseEffect extends Effect {
@Override
public void release() {
if (GLES20.glIsProgram(mProgram)) {
+ if (GLESUtil.DEBUG_GL_MEMOBJS) {
+ Log.d(GLESUtil.DEBUG_GL_MEMOBJS_DEL_TAG, "glDeleteProgram: " + mProgram);
+ }
GLES20.glDeleteProgram(mProgram);
GLESUtil.glesCheckError("glDeleteProgram");
}