Merge "Start edge extension animations in sync" into tm-dev

This commit is contained in:
Pablo Gamito
2022-05-06 13:05:53 +00:00
committed by Android (Google) Code Review

View File

@@ -158,7 +158,7 @@ class SurfaceAnimationRunner {
void continueStartingAnimations() { void continueStartingAnimations() {
synchronized (mLock) { synchronized (mLock) {
mAnimationStartDeferred = false; mAnimationStartDeferred = false;
if (!mPendingAnimations.isEmpty()) { if (!mPendingAnimations.isEmpty() && mPreProcessingAnimations.isEmpty()) {
mChoreographer.postFrameCallback(this::startAnimations); mChoreographer.postFrameCallback(this::startAnimations);
} }
} }
@@ -204,7 +204,7 @@ class SurfaceAnimationRunner {
mPreProcessingAnimations.remove(animationLeash); mPreProcessingAnimations.remove(animationLeash);
mPendingAnimations.put(animationLeash, runningAnim); mPendingAnimations.put(animationLeash, runningAnim);
if (!mAnimationStartDeferred) { if (!mAnimationStartDeferred && mPreProcessingAnimations.isEmpty()) {
mChoreographer.postFrameCallback(this::startAnimations); mChoreographer.postFrameCallback(this::startAnimations);
} }
} }
@@ -214,7 +214,7 @@ class SurfaceAnimationRunner {
if (!requiresEdgeExtension) { if (!requiresEdgeExtension) {
mPendingAnimations.put(animationLeash, runningAnim); mPendingAnimations.put(animationLeash, runningAnim);
if (!mAnimationStartDeferred) { if (!mAnimationStartDeferred && mPreProcessingAnimations.isEmpty()) {
mChoreographer.postFrameCallback(this::startAnimations); mChoreographer.postFrameCallback(this::startAnimations);
} }
@@ -330,6 +330,14 @@ class SurfaceAnimationRunner {
private void startAnimations(long frameTimeNanos) { private void startAnimations(long frameTimeNanos) {
synchronized (mLock) { synchronized (mLock) {
if (!mPreProcessingAnimations.isEmpty()) {
// We only want to start running animations once all mPreProcessingAnimations have
// been processed to ensure preprocessed animations start in sync.
// NOTE: This means we might delay running animations that require preprocessing if
// new animations that also require preprocessing are requested before the previous
// ones have finished (see b/227449117).
return;
}
startPendingAnimationsLocked(); startPendingAnimationsLocked();
} }
mPowerManagerInternal.setPowerBoost(Boost.INTERACTION, 0); mPowerManagerInternal.setPowerBoost(Boost.INTERACTION, 0);
@@ -553,4 +561,4 @@ class SurfaceAnimationRunner {
return mAnimationHandler; return mAnimationHandler;
} }
} }
} }