Merge "InsetController: Release leashes from RenderThread" into rvc-dev am: 672e0e80ba am: 737e879d23
Change-Id: Ie6b57cd88c13f6fcacd7b14596f51e5af7ae1120
This commit is contained in:
@@ -992,4 +992,23 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
|
||||
}
|
||||
return mViewRoot.mWindowAttributes.insetsFlags.behavior;
|
||||
}
|
||||
|
||||
/**
|
||||
* At the time we receive new leashes (e.g. InsetsSourceConsumer is processing
|
||||
* setControl) we need to release the old leash. But we may have already scheduled
|
||||
* a SyncRtSurfaceTransaction applier to use it from the RenderThread. To avoid
|
||||
* synchronization issues we also release from the RenderThread so this release
|
||||
* happens after any existing items on the work queue.
|
||||
*/
|
||||
public void releaseSurfaceControlFromRt(SurfaceControl sc) {
|
||||
if (mViewRoot.mView != null && mViewRoot.mView.isHardwareAccelerated()) {
|
||||
mViewRoot.registerRtFrameCallback(frame -> {
|
||||
sc.release();
|
||||
});
|
||||
// Make sure a frame gets scheduled.
|
||||
mViewRoot.mView.invalidate();
|
||||
} else {
|
||||
sc.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ public class InsetsSourceConsumer {
|
||||
}
|
||||
}
|
||||
if (lastControl != null) {
|
||||
lastControl.release();
|
||||
lastControl.release(mController);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -94,9 +94,9 @@ public class InsetsSourceControl implements Parcelable {
|
||||
dest.writeParcelable(mSurfacePosition, 0 /* flags*/);
|
||||
}
|
||||
|
||||
public void release() {
|
||||
public void release(InsetsController controller) {
|
||||
if (mLeash != null) {
|
||||
mLeash.release();
|
||||
controller.releaseSurfaceControlFromRt(mLeash);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user