From d9c9c0cc75cbb71492af72a80772de9b900d628a Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Tue, 17 Mar 2020 11:31:55 -0700 Subject: [PATCH] SurfacePackage: Add release method Oversight, the SurfacePackage holds a reference to the SurfaceControl which is protected by a close-guard. We need a way to close it explicitly. Going to follow up with a patch to have SurfaceView manage the lifetime when the SurfacePackage is consumed, but want to make sure this explicit release gets in ASAP. Bug: 149591513 Test: Existing tests pass Change-Id: I7276a2440c38cc6d859b79b4c3ee57bc122ce2a6 --- api/current.txt | 1 + core/java/android/view/SurfaceControlViewHost.java | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index da9fd09cf1526..007e67d678724 100644 --- a/api/current.txt +++ b/api/current.txt @@ -53616,6 +53616,7 @@ package android.view { public static final class SurfaceControlViewHost.SurfacePackage implements android.os.Parcelable { method public int describeContents(); + method public void release(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; } diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java index 41a3847975219..b587fbe247672 100644 --- a/core/java/android/view/SurfaceControlViewHost.java +++ b/core/java/android/view/SurfaceControlViewHost.java @@ -52,7 +52,7 @@ public class SurfaceControlViewHost { * a SurfaceView by calling {@link SurfaceView#setChildSurfacePackage}. */ public static final class SurfacePackage implements Parcelable { - private final SurfaceControl mSurfaceControl; + private SurfaceControl mSurfaceControl; private final IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection; SurfacePackage(SurfaceControl sc, IAccessibilityEmbeddedConnection connection) { @@ -97,6 +97,16 @@ public class SurfaceControlViewHost { out.writeStrongBinder(mAccessibilityEmbeddedConnection.asBinder()); } + /** + * Release the SurfaceControl associated with the SurfacePackage. + */ + public void release() { + if (mSurfaceControl != null) { + mSurfaceControl.release(); + } + mSurfaceControl = null; + } + public static final @NonNull Creator CREATOR = new Creator() { public SurfacePackage createFromParcel(Parcel in) {