Loading core/java/android/view/InsetsController.java +19 −0 Original line number Original line Diff line number Diff line Loading @@ -992,4 +992,23 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } } return mViewRoot.mWindowAttributes.insetsFlags.behavior; 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(); } } } } core/java/android/view/InsetsSourceConsumer.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -117,7 +117,7 @@ public class InsetsSourceConsumer { } } } } if (lastControl != null) { if (lastControl != null) { lastControl.release(); lastControl.release(mController); } } } } Loading core/java/android/view/InsetsSourceControl.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -94,9 +94,9 @@ public class InsetsSourceControl implements Parcelable { dest.writeParcelable(mSurfacePosition, 0 /* flags*/); dest.writeParcelable(mSurfacePosition, 0 /* flags*/); } } public void release() { public void release(InsetsController controller) { if (mLeash != null) { if (mLeash != null) { mLeash.release(); controller.releaseSurfaceControlFromRt(mLeash); } } } } Loading Loading
core/java/android/view/InsetsController.java +19 −0 Original line number Original line Diff line number Diff line Loading @@ -992,4 +992,23 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } } return mViewRoot.mWindowAttributes.insetsFlags.behavior; 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(); } } } }
core/java/android/view/InsetsSourceConsumer.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -117,7 +117,7 @@ public class InsetsSourceConsumer { } } } } if (lastControl != null) { if (lastControl != null) { lastControl.release(); lastControl.release(mController); } } } } Loading
core/java/android/view/InsetsSourceControl.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -94,9 +94,9 @@ public class InsetsSourceControl implements Parcelable { dest.writeParcelable(mSurfacePosition, 0 /* flags*/); dest.writeParcelable(mSurfacePosition, 0 /* flags*/); } } public void release() { public void release(InsetsController controller) { if (mLeash != null) { if (mLeash != null) { mLeash.release(); controller.releaseSurfaceControlFromRt(mLeash); } } } } Loading