Release the surface texture entry when the platform view is disposed. (#6829)

We were leaking the texture after the view was disposed.
This commit is contained in:
Amir Hardon 2018-11-12 14:23:25 -08:00 committed by GitHub
parent b1b58911f6
commit 266b0986de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 9 deletions

View File

@ -179,7 +179,7 @@ public class PlatformViewsController implements MethodChannel.MethodCallHandler
VirtualDisplayController vdController = VirtualDisplayController.create(
mContext,
viewFactory,
textureEntry.surfaceTexture(),
textureEntry,
toPhysicalPixels(logicalWidth),
toPhysicalPixels(logicalHeight),
id,

View File

@ -13,6 +13,7 @@ import android.os.Build;
import android.view.Surface;
import android.view.View;
import android.view.ViewTreeObserver;
import io.flutter.view.TextureRegistry;
@TargetApi(Build.VERSION_CODES.KITKAT_WATCH)
class VirtualDisplayController {
@ -20,14 +21,14 @@ class VirtualDisplayController {
public static VirtualDisplayController create(
Context context,
PlatformViewFactory viewFactory,
SurfaceTexture surfaceTexture,
TextureRegistry.SurfaceTextureEntry textureEntry,
int width,
int height,
int viewId,
Object createParams
) {
surfaceTexture.setDefaultBufferSize(width, height);
Surface surface = new Surface(surfaceTexture);
textureEntry.surfaceTexture().setDefaultBufferSize(width, height);
Surface surface = new Surface(textureEntry.surfaceTexture());
DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
int densityDpi = context.getResources().getDisplayMetrics().densityDpi;
@ -45,12 +46,12 @@ class VirtualDisplayController {
}
return new VirtualDisplayController(
context, virtualDisplay, viewFactory, surface, surfaceTexture, viewId, createParams);
context, virtualDisplay, viewFactory, surface, textureEntry, viewId, createParams);
}
private final Context mContext;
private final int mDensityDpi;
private final SurfaceTexture mSurfaceTexture;
private final TextureRegistry.SurfaceTextureEntry mTextureEntry;
private VirtualDisplay mVirtualDisplay;
private SingleViewPresentation mPresentation;
private Surface mSurface;
@ -61,11 +62,11 @@ class VirtualDisplayController {
VirtualDisplay virtualDisplay,
PlatformViewFactory viewFactory,
Surface surface,
SurfaceTexture surfaceTexture,
TextureRegistry.SurfaceTextureEntry textureEntry,
int viewId,
Object createParams
) {
mSurfaceTexture = surfaceTexture;
mTextureEntry = textureEntry;
mSurface = surface;
mContext = context;
mVirtualDisplay = virtualDisplay;
@ -85,7 +86,7 @@ class VirtualDisplayController {
mVirtualDisplay.setSurface(null);
mVirtualDisplay.release();
mSurfaceTexture.setDefaultBufferSize(width, height);
mTextureEntry.surfaceTexture().setDefaultBufferSize(width, height);
DisplayManager displayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
mVirtualDisplay = displayManager.createVirtualDisplay(
"flutter-vd",
@ -130,6 +131,7 @@ class VirtualDisplayController {
mPresentation.detachState();
view.dispose();
mVirtualDisplay.release();
mTextureEntry.release();
}
public View getView() {