diff options
author | Jorim Jaggi <jjaggi@google.com> | 2018-05-23 14:19:45 +0200 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2018-05-23 14:39:13 +0200 |
commit | 4a545dd1b20a48c008fc749faf1d1701e87073b8 (patch) | |
tree | 60fc6c3b1a282f4bf3a9aaf62b7968b2f7f9eed6 | |
parent | c0928c3ba0786028875e174caf0c5e6a976e6fc4 (diff) | |
download | android_packages_apps_Trebuchet-4a545dd1b20a48c008fc749faf1d1701e87073b8.tar.gz android_packages_apps_Trebuchet-4a545dd1b20a48c008fc749faf1d1701e87073b8.tar.bz2 android_packages_apps_Trebuchet-4a545dd1b20a48c008fc749faf1d1701e87073b8.zip |
Use SyncRtSurfaceTransactionApplier for app closing/opening
To ensure 100% synchronization, fixing jank.
Test: Open and close apps
Bug: 78611607
Change-Id: I5646bb259c90b65e1abe0fd67c9918f6a2b196cc
-rw-r--r-- | quickstep/libs/sysui_shared.jar | bin | 129096 -> 131921 bytes | |||
-rw-r--r-- | quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java | 45 | ||||
-rw-r--r-- | quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java | 11 |
3 files changed, 31 insertions, 25 deletions
diff --git a/quickstep/libs/sysui_shared.jar b/quickstep/libs/sysui_shared.jar Binary files differindex 53a6ceb4d..41bf72997 100644 --- a/quickstep/libs/sysui_shared.jar +++ b/quickstep/libs/sysui_shared.jar diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 6703bb546..80d24d035 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,6 +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.SyncRtSurfaceTransactionApplier; +import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplier.SurfaceParams; import com.android.systemui.shared.system.TransactionCompat; import com.android.systemui.shared.system.WindowManagerWrapper; @@ -545,6 +548,13 @@ 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() { @@ -554,13 +564,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag @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 +574,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(); @@ -588,7 +590,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. @@ -599,22 +600,24 @@ 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); + TransactionCompat t = new TransactionCompat(); + RemoteAnimationProvider.prepareTargetsForFirstFrame(closingTargets.apps, t, + MODE_OPENING); + t.setEarlyWakeup(); + t.apply(); 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)); - } + SurfaceParams[] params = new SurfaceParams[openingTargets.apps.length]; + for (int i = openingTargets.apps.length - 1; i >= 0; i--) { + RemoteAnimationTargetCompat target = openingTargets.apps[i]; + matrix.setScale(scale, scale); + matrix.postTranslate(transX0, transY0); + + params[i] = new SurfaceParams(target.leash, mAlpha.value, matrix, crop, + RemoteAnimationProvider.getLayer(target, MODE_OPENING)); } - t.setEarlyWakeup(); - t.apply(); - + surfaceApplier.scheduleApply(params); matrix.reset(); } }); diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java index bbf223d1e..86a0dea28 100644 --- a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java +++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java @@ -54,11 +54,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 + ? Integer.MAX_VALUE + : target.prefixOrderIndex; + } } |