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

Commit e93482f5 authored by Romain Guy's avatar Romain Guy
Browse files

Cancel layer update when a layer is about to be destroyed

Bug #9310706

Change-Id: I73eea6314c326f15a979617e3a05b525935f0d3f
parent 6410c0aa
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -162,6 +162,11 @@ class GLES20Canvas extends HardwareCanvas {
        nPushLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer);
    }

    @Override
    void cancelLayerUpdate(HardwareLayer layer) {
        nCancelLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer);
    }

    @Override
    void flushLayerUpdates() {
        nFlushLayerUpdates(mRenderer);
@@ -191,6 +196,7 @@ class GLES20Canvas extends HardwareCanvas {
    private static native void nClearLayerUpdates(int renderer);
    private static native void nFlushLayerUpdates(int renderer);
    private static native void nPushLayerUpdate(int renderer, int layer);
    private static native void nCancelLayerUpdate(int renderer, int layer);

    ///////////////////////////////////////////////////////////////////////////
    // Canvas management
+13 −0
Original line number Diff line number Diff line
@@ -201,6 +201,19 @@ public abstract class HardwareCanvas extends Canvas {
     */
    abstract void pushLayerUpdate(HardwareLayer layer);

    /**
     * Cancels a queued layer update. If the specified layer was not
     * queued for update, this method has no effect.
     *
     * @param layer The layer whose update to cancel
     *
     * @see #pushLayerUpdate(HardwareLayer)
     * @see #clearLayerUpdates()
     *
     * @hide
     */
    abstract void cancelLayerUpdate(HardwareLayer layer);

    /**
     * Immediately executes all enqueued layer updates.
     *
+16 −0
Original line number Diff line number Diff line
@@ -451,9 +451,20 @@ public abstract class HardwareRenderer {
     * @param layer The hardware layer that needs an update
     *
     * @see #flushLayerUpdates()
     * @see #cancelLayerUpdate(HardwareLayer)
     */
    abstract void pushLayerUpdate(HardwareLayer layer);

    /**
     * Cancels a queued layer update. If the specified layer was not
     * queued for update, this method has no effect.
     *
     * @param layer The layer whose update to cancel
     *
     * @see #pushLayerUpdate(HardwareLayer)
     */
    abstract void cancelLayerUpdate(HardwareLayer layer);

    /**
     * Forces all enqueued layer updates to be executed immediately.
     *
@@ -2132,6 +2143,11 @@ public abstract class HardwareRenderer {
            mGlCanvas.pushLayerUpdate(layer);
        }

        @Override
        void cancelLayerUpdate(HardwareLayer layer) {
            mGlCanvas.cancelLayerUpdate(layer);
        }

        @Override
        void flushLayerUpdates() {
            mGlCanvas.flushLayerUpdates();
+2 −0
Original line number Diff line number Diff line
@@ -12709,6 +12709,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            if (info != null && info.mHardwareRenderer != null &&
                    info.mHardwareRenderer.isEnabled() &&
                    (valid || info.mHardwareRenderer.validate())) {
                info.mHardwareRenderer.cancelLayerUpdate(mHardwareLayer);
                mHardwareLayer.destroy();
                mHardwareLayer = null;
+6 −0
Original line number Diff line number Diff line
@@ -911,6 +911,11 @@ static void android_view_GLES20Canvas_pushLayerUpdate(JNIEnv* env, jobject clazz
    renderer->pushLayerUpdate(layer);
}

static void android_view_GLES20Canvas_cancelLayerUpdate(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, Layer* layer) {
    renderer->cancelLayerUpdate(layer);
}

static void android_view_GLES20Canvas_clearLayerUpdates(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer) {
    renderer->clearLayerUpdates();
@@ -1095,6 +1100,7 @@ static JNINativeMethod gMethods[] = {
    { "nClearLayerUpdates",      "(I)V",       (void*) android_view_GLES20Canvas_clearLayerUpdates },
    { "nFlushLayerUpdates",      "(I)V",       (void*) android_view_GLES20Canvas_flushLayerUpdates },
    { "nPushLayerUpdate",        "(II)V",      (void*) android_view_GLES20Canvas_pushLayerUpdate },
    { "nCancelLayerUpdate",      "(II)V",      (void*) android_view_GLES20Canvas_cancelLayerUpdate },

    { "nSetTextureLayerTransform", "(II)V",    (void*) android_view_GLES20Canvas_setTextureLayerTransform },

Loading