Merge changes I6f21d272,Ic0f72593 into rvc-dev am: f6567d2ef5

Change-Id: I46c50102d587fce6bf02c2275b8f680d233bdc1d
This commit is contained in:
TreeHugger Robot
2020-03-18 21:50:53 +00:00
committed by Automerger Merge Worker
2 changed files with 19 additions and 4 deletions

View File

@@ -98,7 +98,10 @@ public class SurfaceControlViewHost {
} }
/** /**
* Release the SurfaceControl associated with the SurfacePackage. * Release the {@link SurfaceControl} associated with this package.
* It's not necessary to call this if you pass the package to
* {@link SurfaceView#setChildSurfacePackage} as {@link SurfaceView} will
* take ownership in that case.
*/ */
public void release() { public void release() {
if (mSurfaceControl != null) { if (mSurfaceControl != null) {
@@ -230,7 +233,7 @@ public class SurfaceControlViewHost {
* and render the object unusable. * and render the object unusable.
*/ */
public void release() { public void release() {
mViewRoot.dispatchDetachedFromWindow(); mViewRoot.die(false /* immediate */);
mSurfaceControl.release(); mSurfaceControl.release();
} }

View File

@@ -496,8 +496,17 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
updateSurface(); updateSurface();
releaseSurfaces(); releaseSurfaces();
mHaveFrame = false;
// We don't release this as part of releaseSurfaces as
// that is also called on transient visibility changes. We can't
// recreate this Surface, so only release it when we are fully
// detached.
if (mSurfacePackage != null) {
mSurfacePackage.release();
mSurfacePackage = null;
}
mHaveFrame = false;
super.onDetachedFromWindow(); super.onDetachedFromWindow();
} }
@@ -1546,7 +1555,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
* Display the view-hierarchy embedded within a {@link SurfaceControlViewHost.SurfacePackage} * Display the view-hierarchy embedded within a {@link SurfaceControlViewHost.SurfacePackage}
* within this SurfaceView. If this SurfaceView is above it's host Surface (see * within this SurfaceView. If this SurfaceView is above it's host Surface (see
* {@link #setZOrderOnTop} then the embedded Surface hierarchy will be able to receive * {@link #setZOrderOnTop} then the embedded Surface hierarchy will be able to receive
* input. * input. This will take ownership of the SurfaceControl contained inside the SurfacePackage
* and free the caller of the obligation to call
* {@link SurfaceControlViewHost.SurfacePackage#release}.
* *
* @param p The SurfacePackage to embed. * @param p The SurfacePackage to embed.
*/ */
@@ -1556,6 +1567,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
mSurfacePackage.getSurfaceControl() : null; mSurfacePackage.getSurfaceControl() : null;
if (mSurfaceControl != null && lastSc != null) { if (mSurfaceControl != null && lastSc != null) {
mTmpTransaction.reparent(lastSc, null).apply(); mTmpTransaction.reparent(lastSc, null).apply();
mSurfacePackage.release();
} else if (mSurfaceControl != null) { } else if (mSurfaceControl != null) {
reparentSurfacePackage(mTmpTransaction, p); reparentSurfacePackage(mTmpTransaction, p);
mTmpTransaction.apply(); mTmpTransaction.apply();