summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2014-02-19 18:28:42 -0800
committer John Reck <jreck@google.com> 2014-02-19 18:31:08 -0800
commit0b2c8df7a6883a6af84c52efbd93619cc63cde53 (patch)
treed08d114d3e2f04798a157b613ce6ff6f995f090f
parent587f43d8725b11632b5d64a0a56a647207f01668 (diff)
Fix layer recycling for GLRenderer
Bug: 13007905 Change-Id: I1589f2bb14429099e391c03d7dfb1650da145f28
-rw-r--r--core/java/android/view/GLRenderer.java6
-rw-r--r--core/jni/android_view_GLRenderer.cpp9
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",