From fbd6f7a1f928ffd5efda659e161b398a26aaa957 Mon Sep 17 00:00:00 2001 From: Matt Carroll Date: Thu, 23 Jan 2020 13:19:42 -0800 Subject: [PATCH] Release TextureView surface within FlutterTextureView when disconnected. (#48535) (flutter/engine#15899) --- .../io/flutter/embedding/android/FlutterTextureView.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterTextureView.java b/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterTextureView.java index 7205cc5a6f9..adee7972583 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterTextureView.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterTextureView.java @@ -38,6 +38,8 @@ public class FlutterTextureView extends TextureView implements RenderSurface { private boolean isAttachedToFlutterRenderer = false; @Nullable private FlutterRenderer flutterRenderer; + @Nullable + private Surface renderSurface; // Connects the {@code SurfaceTexture} beneath this {@code TextureView} with Flutter's native code. // Callbacks are received by this Object and then those messages are forwarded to our @@ -172,7 +174,8 @@ public class FlutterTextureView extends TextureView implements RenderSurface { throw new IllegalStateException("connectSurfaceToRenderer() should only be called when flutterRenderer and getSurfaceTexture() are non-null."); } - flutterRenderer.startRenderingToSurface(new Surface(getSurfaceTexture())); + renderSurface = new Surface(getSurfaceTexture()); + flutterRenderer.startRenderingToSurface(renderSurface); } // FlutterRenderer must be non-null. @@ -192,5 +195,7 @@ public class FlutterTextureView extends TextureView implements RenderSurface { } flutterRenderer.stopRenderingToSurface(); + renderSurface.release(); + renderSurface = null; } }