diff options
| author | Chet Haase <chet@google.com> | 2010-10-22 08:52:33 -0700 |
|---|---|---|
| committer | Chet Haase <chet@google.com> | 2010-10-22 08:57:48 -0700 |
| commit | 27f0b17d853d8bef918c3d869044e50cf3904ee3 (patch) | |
| tree | e9a0b7a1fe09465524350b7a231c6412c1f58c9c /core | |
| parent | 2754b4bde824bfbdc483ad627aaaea87971b053a (diff) | |
| download | frameworks_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.cpp | 8 | ||||
| -rw-r--r-- | core/jni/android/graphics/Matrix.cpp | 4 | ||||
| -rw-r--r-- | core/jni/android/graphics/Paint.cpp | 4 |
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) { |
