diff options
| -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", |