From 0c70dbdc5e53fd55bf79edecc825c9c496fae8cc Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Tue, 24 Aug 2021 13:36:41 -0700 Subject: [PATCH] Synchronize surface transaction Until now the SurfaceControl transaction was being applied asynchronously, which could lead to it being executed out of sync with launcher drawing. This became an issue at higher refresh rates, where frames are produced at a much faster pace. In order to fix this issue, we can use BLAST transactions, which are annotated with a frame number. Test: record video, go through it manually Fixes: 194320152 Change-Id: I1636a1ded4f9dd84c54ba12239e3549b92ed7567 --- .../android/launcher3/statehandlers/DepthController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java index 5777fb9a7f..68159fafdd 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java @@ -26,6 +26,7 @@ import android.animation.ObjectAnimator; import android.os.IBinder; import android.os.SystemProperties; import android.util.FloatProperty; +import android.view.AttachedSurfaceControl; import android.view.CrossWindowBlurListeners; import android.view.SurfaceControl; import android.view.View; @@ -316,7 +317,12 @@ public class DepthController implements StateHandler, transaction.setEarlyWakeupEnd(); mInEarlyWakeUp = false; } - transaction.apply(); + + AttachedSurfaceControl rootSurfaceControl = + mLauncher.getRootView().getRootSurfaceControl(); + if (rootSurfaceControl != null) { + rootSurfaceControl.applyTransactionOnDraw(transaction); + } } return true; }