mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
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:
parent
b1b58911f6
commit
266b0986de
@ -179,7 +179,7 @@ public class PlatformViewsController implements MethodChannel.MethodCallHandler
|
||||
VirtualDisplayController vdController = VirtualDisplayController.create(
|
||||
mContext,
|
||||
viewFactory,
|
||||
textureEntry.surfaceTexture(),
|
||||
textureEntry,
|
||||
toPhysicalPixels(logicalWidth),
|
||||
toPhysicalPixels(logicalHeight),
|
||||
id,
|
||||
|
||||
@ -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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user