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

Commit 64339168 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Don't destroy the same texture twice Bug #7221449" into jb-mr1-dev

parents 89ba270c ef09a210
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@ class GLES20Canvas extends HardwareCanvas {
    static native void nSetLayerColorFilter(int layerId, int nativeColorFilter);
    static native void nUpdateTextureLayer(int layerId, int width, int height, boolean opaque,
            SurfaceTexture surface);
    static native void nClearLayerTexture(int layerId);
    static native void nSetTextureLayerTransform(int layerId, int matrix);
    static native void nDestroyLayer(int layerId);
    static native void nDestroyLayerDeferred(int layerId);
+5 −0
Original line number Diff line number Diff line
@@ -66,6 +66,11 @@ abstract class GLES20Layer extends HardwareLayer {
        mLayer = 0;
    }

    @Override
    void clearStorage() {
        if (mLayer != 0) GLES20Canvas.nClearLayerTexture(mLayer);
    }

    static class Finalizer {
        private int mLayerId;

+5 −0
Original line number Diff line number Diff line
@@ -204,4 +204,9 @@ abstract class HardwareLayer {
     * @param dirtyRect The dirty region of the layer that needs to be redrawn
     */
    abstract void redrawLater(DisplayList displayList, Rect dirtyRect);

    /**
     * Indicates that this layer has lost its underlying storage.
     */
    abstract void clearStorage();
}
+1 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ public class TextureView extends View {
    private void destroySurface() {
        if (mLayer != null) {
            mSurface.detachFromGLContext();
            mLayer.clearStorage();

            boolean shouldRelease = true;
            if (mListener != null) {
+6 −0
Original line number Diff line number Diff line
@@ -822,6 +822,11 @@ static void android_view_GLES20Canvas_updateRenderLayer(JNIEnv* env, jobject cla
    layer->updateDeferred(renderer, displayList, left, top, right, bottom);
}

static void android_view_GLES20Canvas_clearLayerTexture(JNIEnv* env, jobject clazz,
        Layer* layer) {
    layer->clearTexture();
}

static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
        Layer* layer, SkMatrix* matrix) {

@@ -1016,6 +1021,7 @@ static JNINativeMethod gMethods[] = {
    { "nUpdateTextureLayer",     "(IIIZLandroid/graphics/SurfaceTexture;)V",
            (void*) android_view_GLES20Canvas_updateTextureLayer },
    { "nUpdateRenderLayer",      "(IIIIIII)V", (void*) android_view_GLES20Canvas_updateRenderLayer },
    { "nClearLayerTexture",      "(I)V",       (void*) android_view_GLES20Canvas_clearLayerTexture },
    { "nDestroyLayer",           "(I)V",       (void*) android_view_GLES20Canvas_destroyLayer },
    { "nDestroyLayerDeferred",   "(I)V",       (void*) android_view_GLES20Canvas_destroyLayerDeferred },
    { "nDrawLayer",              "(IIFFI)V",   (void*) android_view_GLES20Canvas_drawLayer },
Loading