From 1008f6d72e29af8914526e6a7ce753ae3bdcdfc5 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 23 May 2018 14:19:45 +0200 Subject: [PATCH] Use SyncRtSurfaceTransactionApplier for app opening To ensure 100% synchronization, fixing jank. Test: Open and close apps Bug: 78611607 Change-Id: I6843e88ab1de0b8e7d80e6a6f547b895b527d093 --- quickstep/libs/sysui_shared.jar | Bin 129096 -> 131921 bytes .../LauncherAppTransitionManagerImpl.java | 93 +++++++++--------- .../util/RemoteAnimationProvider.java | 13 ++- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/quickstep/libs/sysui_shared.jar b/quickstep/libs/sysui_shared.jar index 53a6ceb4d06e87b31c69070e18eb74622257cc26..41bf7299742b44f2331aa24db043245a54290060 100644 GIT binary patch delta 11675 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 SmT;DE(rj>W#}l_jfcsz33MSD2 delta 8876 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 Lmim!zfEfP|r7aQx diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 3075c3f48d..2c5b815bda 100644 --- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -71,6 +71,7 @@ import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; import com.android.quickstep.util.ClipAnimationHelper; import com.android.quickstep.util.MultiValueUpdateListener; import com.android.quickstep.util.RemoteAnimationProvider; +import com.android.quickstep.util.RemoteAnimationTargetSet; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.system.ActivityCompat; @@ -79,7 +80,8 @@ import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import com.android.systemui.shared.system.RemoteAnimationDefinitionCompat; import com.android.systemui.shared.system.RemoteAnimationRunnerCompat; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; -import com.android.systemui.shared.system.TransactionCompat; +import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplier; +import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplier.SurfaceParams; import com.android.systemui.shared.system.WindowManagerWrapper; /** @@ -545,22 +547,21 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag Rect crop = new Rect(); Matrix matrix = new Matrix(); + RemoteAnimationTargetSet openingTargets = new RemoteAnimationTargetSet(targets, + MODE_OPENING); + RemoteAnimationTargetSet closingTargets = new RemoteAnimationTargetSet(targets, + MODE_CLOSING); + SyncRtSurfaceTransactionApplier surfaceApplier = new SyncRtSurfaceTransactionApplier( + mFloatingView); + ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1); appAnimator.setDuration(APP_LAUNCH_DURATION); appAnimator.addUpdateListener(new MultiValueUpdateListener() { // Fade alpha for the app window. FloatProp mAlpha = new FloatProp(0f, 1f, 0, 60, LINEAR); - boolean isFirstFrame = true; @Override public void onUpdate(float percent) { - final Surface surface = getSurface(mFloatingView); - final long frameNumber = surface != null ? getNextFrameNumber(surface) : -1; - if (frameNumber == -1) { - // Booo, not cool! Our surface got destroyed, so no reason to animate anything. - Log.w(TAG, "Failed to animate, surface got destroyed."); - return; - } final float easePercent = AGGRESSIVE_EASE.getInterpolation(percent); // Calculate app icon size. @@ -571,7 +572,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag float scaleX = iconWidth / windowTargetBounds.width(); float scaleY = iconHeight / windowTargetBounds.height(); float scale = Math.min(1f, Math.min(scaleX, scaleY)); - matrix.setScale(scale, scale); // Position the scaled window on top of the icon int windowWidth = windowTargetBounds.width(); @@ -585,7 +585,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag float transX0 = floatingViewBounds[0] - offsetX; float transY0 = floatingViewBounds[1] - offsetY; - matrix.postTranslate(transX0, transY0); // Animate the window crop so that it starts off as a square, and then reveals // horizontally. @@ -596,23 +595,27 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag crop.right = windowWidth; crop.bottom = (int) (crop.top + cropHeight); - TransactionCompat t = new TransactionCompat(); - if (isFirstFrame) { - RemoteAnimationProvider.prepareTargetsForFirstFrame(targets, t, MODE_OPENING); - isFirstFrame = false; - } - for (RemoteAnimationTargetCompat target : targets) { - if (target.mode == MODE_OPENING) { - t.setAlpha(target.leash, mAlpha.value); - t.setMatrix(target.leash, matrix); - t.setWindowCrop(target.leash, crop); - t.deferTransactionUntil(target.leash, surface, getNextFrameNumber(surface)); - } - } - t.setEarlyWakeup(); - t.apply(); + SurfaceParams[] params = new SurfaceParams[targets.length]; + for (int i = targets.length - 1; i >= 0; i--) { + RemoteAnimationTargetCompat target = targets[i]; - matrix.reset(); + Rect targetCrop; + float alpha; + if (target.mode == MODE_OPENING) { + matrix.setScale(scale, scale); + matrix.postTranslate(transX0, transY0); + targetCrop = crop; + alpha = mAlpha.value; + } else { + matrix.reset(); + alpha = 1f; + targetCrop = target.sourceContainerBounds; + } + + params[i] = new SurfaceParams(target.leash, alpha, matrix, targetCrop, + RemoteAnimationProvider.getLayer(target, MODE_OPENING)); + } + surfaceApplier.scheduleApply(params); } }); return appAnimator; @@ -692,6 +695,8 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag * Animator that controls the transformations of the windows the targets that are closing. */ private Animator getClosingWindowAnimators(RemoteAnimationTargetCompat[] targets) { + SyncRtSurfaceTransactionApplier surfaceApplier = + new SyncRtSurfaceTransactionApplier(mDragLayer); Matrix matrix = new Matrix(); ValueAnimator closingAnimator = ValueAnimator.ofFloat(0, 1); int duration = CLOSING_TRANSITION_DURATION_MS; @@ -701,30 +706,28 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag FloatProp mScale = new FloatProp(1f, 1f, 0, duration, DEACCEL_1_7); FloatProp mAlpha = new FloatProp(1f, 0f, 25, 125, LINEAR); - boolean isFirstFrame = true; - @Override public void onUpdate(float percent) { - TransactionCompat t = new TransactionCompat(); - if (isFirstFrame) { - RemoteAnimationProvider.prepareTargetsForFirstFrame(targets, t, MODE_CLOSING); - isFirstFrame = false; - } - for (RemoteAnimationTargetCompat app : targets) { - if (app.mode == RemoteAnimationTargetCompat.MODE_CLOSING) { - t.setAlpha(app.leash, mAlpha.value); + SurfaceParams[] params = new SurfaceParams[targets.length]; + for (int i = targets.length - 1; i >= 0; i--) { + RemoteAnimationTargetCompat target = targets[i]; + float alpha; + if (target.mode == MODE_CLOSING) { matrix.setScale(mScale.value, mScale.value, - app.sourceContainerBounds.centerX(), - app.sourceContainerBounds.centerY()); + target.sourceContainerBounds.centerX(), + target.sourceContainerBounds.centerY()); matrix.postTranslate(0, mDy.value); - matrix.postTranslate(app.position.x, app.position.y); - t.setMatrix(app.leash, matrix); + matrix.postTranslate(target.position.x, target.position.y); + alpha = mAlpha.value; + } else { + matrix.reset(); + alpha = 1f; } + params[i] = new SurfaceParams(target.leash, alpha, matrix, + target.sourceContainerBounds, + RemoteAnimationProvider.getLayer(target, MODE_CLOSING)); } - t.setEarlyWakeup(); - t.apply(); - - matrix.reset(); + surfaceApplier.scheduleApply(params); } }); diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java index bbf223d1ef..a7e6d74f02 100644 --- a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java +++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java @@ -28,6 +28,8 @@ import com.android.systemui.shared.system.TransactionCompat; @FunctionalInterface public interface RemoteAnimationProvider { + static final int Z_BOOST_BASE = 800570000; + AnimatorSet createWindowAnimation(RemoteAnimationTargetCompat[] targets); default ActivityOptions toActivityOptions(Handler handler, long duration) { @@ -54,11 +56,14 @@ public interface RemoteAnimationProvider { static void prepareTargetsForFirstFrame(RemoteAnimationTargetCompat[] targets, TransactionCompat t, int boostModeTargets) { for (RemoteAnimationTargetCompat target : targets) { - int layer = target.mode == boostModeTargets - ? Integer.MAX_VALUE - : target.prefixOrderIndex; - t.setLayer(target.leash, layer); + t.setLayer(target.leash, getLayer(target, boostModeTargets)); t.show(target.leash); } } + + static int getLayer(RemoteAnimationTargetCompat target, int boostModeTarget) { + return target.mode == boostModeTarget + ? Z_BOOST_BASE + target.prefixOrderIndex + : target.prefixOrderIndex; + } }