diff options
| author | 2014-02-19 18:28:42 -0800 | |
|---|---|---|
| committer | 2014-02-19 18:31:08 -0800 | |
| commit | 0b2c8df7a6883a6af84c52efbd93619cc63cde53 (patch) | |
| tree | d08d114d3e2f04798a157b613ce6ff6f995f090f | |
| parent | 587f43d8725b11632b5d64a0a56a647207f01668 (diff) | |
Fix layer recycling for GLRenderer
Bug: 13007905
Change-Id: I1589f2bb14429099e391c03d7dfb1650da145f28
| -rw-r--r-- | core/java/android/view/GLRenderer.java | 6 | ||||
| -rw-r--r-- | core/jni/android_view_GLRenderer.cpp | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/view/GLRenderer.java b/core/java/android/view/GLRenderer.java index c1eb6b771c09..e9f1f67c3567 100644 --- a/core/java/android/view/GLRenderer.java +++ b/core/java/android/view/GLRenderer.java @@ -500,6 +500,10 @@ public class GLRenderer extends HardwareRenderer { if (mGlCanvas != null) { mGlCanvas.cancelLayerUpdate(layer); } + if (Looper.myLooper() == Looper.getMainLooper() && validate()) { + long backingLayer = layer.detachBackingLayer(); + nDestroyLayer(backingLayer); + } mAttachedLayers.remove(layer); } @@ -1472,6 +1476,8 @@ public class GLRenderer extends HardwareRenderer { */ static native boolean isBackBufferPreserved(); + static native void nDestroyLayer(long layerPtr); + class DrawPerformanceDataProvider extends GraphDataProvider { private final int mGraphType; diff --git a/core/jni/android_view_GLRenderer.cpp b/core/jni/android_view_GLRenderer.cpp index 7cf93d06d70e..5c5b52c7bb0d 100644 --- a/core/jni/android_view_GLRenderer.cpp +++ b/core/jni/android_view_GLRenderer.cpp @@ -28,6 +28,7 @@ #include <Caches.h> #include <Extensions.h> +#include <LayerRenderer.h> #ifdef USE_OPENGL_RENDERER EGLAPI void EGLAPIENTRY eglBeginFrame(EGLDisplay dpy, EGLSurface surface); @@ -131,6 +132,13 @@ static jlong android_view_GLRenderer_getSystemTime(JNIEnv* env, jobject clazz) { return systemTime(SYSTEM_TIME_MONOTONIC); } +static void android_view_GLRenderer_destroyLayer(JNIEnv* env, jobject clazz, + jlong layerPtr) { + using namespace android::uirenderer; + Layer* layer = reinterpret_cast<Layer*>(layerPtr); + LayerRenderer::destroyLayer(layer); +} + #endif // USE_OPENGL_RENDERER // ---------------------------------------------------------------------------- @@ -160,6 +168,7 @@ static JNINativeMethod gMethods[] = { { "beginFrame", "([I)V", (void*) android_view_GLRenderer_beginFrame }, { "getSystemTime", "()J", (void*) android_view_GLRenderer_getSystemTime }, + { "nDestroyLayer", "(J)V", (void*) android_view_GLRenderer_destroyLayer }, #endif { "setupShadersDiskCache", "(Ljava/lang/String;)V", |