mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-03 17:36:49 +00:00
Merge "Revert "Revert "Use the Coreographer's frame time for a more rel..."" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
7be62fbe00
@@ -80,6 +80,8 @@ import android.os.IBinder;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.util.TimeUtils;
|
||||
import android.view.Choreographer;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.RemoteAnimationTarget;
|
||||
import android.view.SurfaceControl;
|
||||
@@ -1734,13 +1736,30 @@ public abstract class AbsSwipeUpHandler<
|
||||
}
|
||||
|
||||
private void handOffAnimation(PointF velocityPxPerMs) {
|
||||
if (!TransitionAnimator.Companion.longLivedReturnAnimationsEnabled()
|
||||
|| mRecentsAnimationController == null) {
|
||||
if (!TransitionAnimator.Companion.longLivedReturnAnimationsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// This function is not guaranteed to be called inside a frame. We try to access the frame
|
||||
// time immediately, but if we're not inside a frame we must post a callback to be run at
|
||||
// the beginning of the next frame.
|
||||
try {
|
||||
handOffAnimationInternal(Choreographer.getInstance().getFrameTime(), velocityPxPerMs);
|
||||
} catch (IllegalStateException e) {
|
||||
Choreographer.getInstance().postFrameCallback(
|
||||
frameTimeNanos -> handOffAnimationInternal(
|
||||
frameTimeNanos / TimeUtils.NANOS_PER_MS, velocityPxPerMs));
|
||||
}
|
||||
}
|
||||
|
||||
private void handOffAnimationInternal(long timestamp, PointF velocityPxPerMs) {
|
||||
if (mRecentsAnimationController == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Pair<RemoteAnimationTarget[], WindowAnimationState[]> targetsAndStates =
|
||||
extractTargetsAndStates(mRemoteTargetHandles, velocityPxPerMs);
|
||||
extractTargetsAndStates(
|
||||
mRemoteTargetHandles, timestamp, velocityPxPerMs);
|
||||
mRecentsAnimationController.handOffAnimation(
|
||||
targetsAndStates.first, targetsAndStates.second);
|
||||
ActiveGestureProtoLogProxy.logHandOffAnimation();
|
||||
|
||||
@@ -795,14 +795,15 @@ public final class TaskViewUtils {
|
||||
* second applies to the target in the same index of the first.
|
||||
*
|
||||
* @param handles The handles wrapping each target.
|
||||
* @param timestamp The start time of the current frame.
|
||||
* @param velocityPxPerMs The current velocity of the target animations.
|
||||
*/
|
||||
@NonNull
|
||||
public static Pair<RemoteAnimationTarget[], WindowAnimationState[]> extractTargetsAndStates(
|
||||
@NonNull RemoteTargetHandle[] handles, @NonNull PointF velocityPxPerMs) {
|
||||
@NonNull RemoteTargetHandle[] handles, long timestamp,
|
||||
@NonNull PointF velocityPxPerMs) {
|
||||
RemoteAnimationTarget[] targets = new RemoteAnimationTarget[handles.length];
|
||||
WindowAnimationState[] animationStates = new WindowAnimationState[handles.length];
|
||||
long timestamp = System.currentTimeMillis();
|
||||
|
||||
for (int i = 0; i < handles.length; i++) {
|
||||
targets[i] = handles[i].getTransformParams().getTargetSet().apps[i];
|
||||
|
||||
Reference in New Issue
Block a user