summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2010-10-22 08:52:33 -0700
committerChet Haase <chet@google.com>2010-10-22 08:57:48 -0700
commit27f0b17d853d8bef918c3d869044e50cf3904ee3 (patch)
treee9a0b7a1fe09465524350b7a231c6412c1f58c9c /core
parent2754b4bde824bfbdc483ad627aaaea87971b053a (diff)
downloadframeworks_base-27f0b17d853d8bef918c3d869044e50cf3904ee3.zip
frameworks_base-27f0b17d853d8bef918c3d869044e50cf3904ee3.tar.gz
frameworks_base-27f0b17d853d8bef918c3d869044e50cf3904ee3.tar.bz2
Fix native resource leak when OpenGL renderer is not being used.
Native resources (bitmaps, matrices, paints, shaders) are shared when display lists are used, and a refcounting system is in place to take care of disposing when all clients are finished with them. But the cache where these refcounts are tracked is not enabled when the Open GL renderer is not being used. This results in the native destructors not being called, and the resources are leaked. Change-Id: Ic7aeb55e4636dcad229846601407e596160346e6
Diffstat (limited to 'core')
-rw-r--r--core/jni/android/graphics/Bitmap.cpp8
-rw-r--r--core/jni/android/graphics/Matrix.cpp4
-rw-r--r--core/jni/android/graphics/Paint.cpp4
3 files changed, 8 insertions, 8 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index f8a80b0..8956e39 100644
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -256,20 +256,20 @@ static void Bitmap_destructor(JNIEnv* env, jobject, SkBitmap* bitmap) {
#ifdef USE_OPENGL_RENDERER
if (android::uirenderer::Caches::hasInstance()) {
android::uirenderer::Caches::getInstance().resourceCache.destructor(bitmap);
+ return;
}
-#else // !USE_OPENGL_RENDERER
+#endif // USE_OPENGL_RENDERER
delete bitmap;
-#endif
}
static void Bitmap_recycle(JNIEnv* env, jobject, SkBitmap* bitmap) {
#ifdef USE_OPENGL_RENDERER
if (android::uirenderer::Caches::hasInstance()) {
android::uirenderer::Caches::getInstance().resourceCache.recycle(bitmap);
+ return;
}
-#else // !USE_OPENGL_RENDERER
- bitmap->setPixels(NULL, NULL);
#endif // USE_OPENGL_RENDERER
+ bitmap->setPixels(NULL, NULL);
}
// These must match the int values in Bitmap.java
diff --git a/core/jni/android/graphics/Matrix.cpp b/core/jni/android/graphics/Matrix.cpp
index 6667756..b305506 100644
--- a/core/jni/android/graphics/Matrix.cpp
+++ b/core/jni/android/graphics/Matrix.cpp
@@ -35,10 +35,10 @@ public:
#ifdef USE_OPENGL_RENDERER
if (android::uirenderer::Caches::hasInstance()) {
android::uirenderer::Caches::getInstance().resourceCache.destructor(obj);
+ return;
}
-#else // !USE_OPENGL_RENDERER
+#endif // USE_OPENGL_RENDERER
delete obj;
-#endif
}
static SkMatrix* create(JNIEnv* env, jobject clazz, const SkMatrix* src) {
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 339c1a4..79a02f1 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -66,10 +66,10 @@ public:
#ifdef USE_OPENGL_RENDERER
if (android::uirenderer::Caches::hasInstance()) {
android::uirenderer::Caches::getInstance().resourceCache.destructor(obj);
+ return;
}
-#else // !USE_OPENGL_RENDERER
+#endif // USE_OPENGL_RENDERER
delete obj;
-#endif
}
static SkPaint* init(JNIEnv* env, jobject clazz) {