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

Commit ba3d4f6e authored by Sergei Vasilinetc's avatar Sergei Vasilinetc Committed by Android (Google) Code Review
Browse files

Merge "TextureView: destroy layer on destroyHardwareResources event" into nyc-mr1-dev

parents 4a051a84 1c16c37d
Loading
Loading
Loading
Loading
+30 −18
Original line number Diff line number Diff line
@@ -218,15 +218,32 @@ public class TextureView extends View {
    /** @hide */
    @Override
    protected void onDetachedFromWindowInternal() {
        destroySurface();
        destroyHardwareLayer();
        releaseSurfaceTexture();
        super.onDetachedFromWindowInternal();
    }

    private void destroySurface() {
    /**
     * @hide
     */
    @Override
    protected void destroyHardwareResources() {
        destroyHardwareLayer();
        mUpdateSurface = mSurface != null;
    }

    private void destroyHardwareLayer() {
        if (mLayer != null) {
            mLayer.detachSurfaceTexture();
            mLayer.destroy();
            mLayer = null;
            mMatrixChanged = true;
        }
    }

    private void releaseSurfaceTexture() {
        boolean shouldRelease = true;

        if (mListener != null) {
            shouldRelease = mListener.onSurfaceTextureDestroyed(mSurface);
        }
@@ -235,17 +252,12 @@ public class TextureView extends View {
            nDestroyNativeWindow();
        }

            mLayer.destroy();
            if (shouldRelease) mSurface.release();
        if (shouldRelease) {
            mSurface.release();
        }
        mSurface = null;
            mLayer = null;

            // Make sure if/when new layer gets re-created, transform matrix will
            // be re-applied.
            mMatrixChanged = true;
        mHadSurface = true;
    }
    }

    /**
     * The layer type of a TextureView is ignored since a TextureView is always
@@ -366,9 +378,9 @@ public class TextureView extends View {
                // Create a new SurfaceTexture for the layer.
                mSurface = new SurfaceTexture(false);
                mLayer.setSurfaceTexture(mSurface);
                nCreateNativeWindow(mSurface);
            }
            mSurface.setDefaultBufferSize(getWidth(), getHeight());
            nCreateNativeWindow(mSurface);

            mSurface.setOnFrameAvailableListener(mUpdateListener, mAttachInfo.mHandler);