diff --git a/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducer.java b/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducer.java index 6f522a65c3..ed18f80476 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducer.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducer.java @@ -52,6 +52,8 @@ final class SurfaceTextureSurfaceProducer @Override public void release() { texture.release(); + surface.release(); + surface = null; released = true; } diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducerTest.java b/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducerTest.java index c4491c5092..e451ca51b4 100644 --- a/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducerTest.java +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/renderer/SurfaceTextureSurfaceProducerTest.java @@ -6,6 +6,8 @@ package io.flutter.embedding.engine.renderer; import static io.flutter.Build.API_LEVELS; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.robolectric.Shadows.shadowOf; @@ -67,4 +69,19 @@ public final class SurfaceTextureSurfaceProducerTest { fakeJNI.detachFromNativeAndReleaseResources(); producer.release(); } + + @Test + public void releaseWillReleaseSurface() { + final FlutterRenderer flutterRenderer = new FlutterRenderer(fakeJNI); + + // Create a surface and set the initial size. + final Handler handler = new Handler(Looper.getMainLooper()); + final SurfaceTextureSurfaceProducer producer = + new SurfaceTextureSurfaceProducer( + 0, handler, fakeJNI, flutterRenderer.registerSurfaceTexture(new SurfaceTexture(0))); + final Surface surface = producer.getSurface(); + assertTrue(surface.isValid()); + producer.release(); + assertFalse(surface.isValid()); + } }