Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b2c8df7 authored by John Reck's avatar John Reck
Browse files

Fix layer recycling for GLRenderer

 Bug: 13007905

Change-Id: I1589f2bb14429099e391c03d7dfb1650da145f28
parent 587f43d8
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -500,6 +500,10 @@ public class GLRenderer extends HardwareRenderer {
        if (mGlCanvas != null) {
        if (mGlCanvas != null) {
            mGlCanvas.cancelLayerUpdate(layer);
            mGlCanvas.cancelLayerUpdate(layer);
        }
        }
        if (Looper.myLooper() == Looper.getMainLooper() && validate()) {
            long backingLayer = layer.detachBackingLayer();
            nDestroyLayer(backingLayer);
        }
        mAttachedLayers.remove(layer);
        mAttachedLayers.remove(layer);
    }
    }


@@ -1472,6 +1476,8 @@ public class GLRenderer extends HardwareRenderer {
     */
     */
    static native boolean isBackBufferPreserved();
    static native boolean isBackBufferPreserved();


    static native void nDestroyLayer(long layerPtr);

    class DrawPerformanceDataProvider extends GraphDataProvider {
    class DrawPerformanceDataProvider extends GraphDataProvider {
        private final int mGraphType;
        private final int mGraphType;


+9 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@


#include <Caches.h>
#include <Caches.h>
#include <Extensions.h>
#include <Extensions.h>
#include <LayerRenderer.h>


#ifdef USE_OPENGL_RENDERER
#ifdef USE_OPENGL_RENDERER
    EGLAPI void EGLAPIENTRY eglBeginFrame(EGLDisplay dpy, EGLSurface surface);
    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);
    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
#endif // USE_OPENGL_RENDERER


// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
@@ -160,6 +168,7 @@ static JNINativeMethod gMethods[] = {
    { "beginFrame",            "([I)V", (void*) android_view_GLRenderer_beginFrame },
    { "beginFrame",            "([I)V", (void*) android_view_GLRenderer_beginFrame },


    { "getSystemTime",         "()J",   (void*) android_view_GLRenderer_getSystemTime },
    { "getSystemTime",         "()J",   (void*) android_view_GLRenderer_getSystemTime },
    { "nDestroyLayer",         "(J)V",  (void*) android_view_GLRenderer_destroyLayer },
#endif
#endif


    { "setupShadersDiskCache", "(Ljava/lang/String;)V",
    { "setupShadersDiskCache", "(Ljava/lang/String;)V",