summaryrefslogtreecommitdiff
path: root/core/java/android/view/InsetsController.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view/InsetsController.java')
-rw-r--r--core/java/android/view/InsetsController.java19
1 files changed, 19 insertions, 0 deletions
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index 573d8fc65c84..f52960c5c3e0 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -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();
+ }
+ }
}