Loading services/core/java/com/android/server/wm/RemoteAnimationController.java +11 −7 Original line number Diff line number Diff line Loading @@ -96,13 +96,17 @@ class RemoteAnimationController { // Scale the timeout with the animator scale the controlling app is using. mHandler.postDelayed(mTimeoutRunnable, (long) (TIMEOUT_MS * mService.getCurrentAnimatorScale())); final RemoteAnimationTarget[] animations = createAnimations(); mService.mAnimator.addAfterPrepareSurfacesRunnable(() -> { try { mRemoteAnimationAdapter.getRunner().onAnimationStart(createAnimations(), mRemoteAnimationAdapter.getRunner().onAnimationStart(animations, mFinishedCallback); } catch (RemoteException e) { Slog.e(TAG, "Failed to start remote animation", e); onAnimationFinished(); } }); } private RemoteAnimationTarget[] createAnimations() { Loading services/core/java/com/android/server/wm/RootWindowContainer.java +2 −0 Original line number Diff line number Diff line Loading @@ -588,6 +588,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces"); } mService.mAnimator.executeAfterPrepareSurfacesRunnables(); final WindowSurfacePlacer surfacePlacer = mService.mWindowPlacerLocked; // If we are ready to perform an app transition, check through all of the app tokens to be Loading services/core/java/com/android/server/wm/WindowAnimator.java +16 −1 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ public class WindowAnimator { * executed and the corresponding transaction is closed and applied. */ private final ArrayList<Runnable> mAfterPrepareSurfacesRunnables = new ArrayList<>(); private boolean mInExecuteAfterPrepareSurfacesRunnables; WindowAnimator(final WindowManagerService service) { mService = service; Loading Loading @@ -426,11 +427,24 @@ public class WindowAnimator { * the corresponding transaction is closed and applied. */ void addAfterPrepareSurfacesRunnable(Runnable r) { // If runnables are already being handled in executeAfterPrepareSurfacesRunnable, then just // immediately execute the runnable passed in. if (mInExecuteAfterPrepareSurfacesRunnables) { r.run(); return; } mAfterPrepareSurfacesRunnables.add(r); scheduleAnimation(); } private void executeAfterPrepareSurfacesRunnables() { void executeAfterPrepareSurfacesRunnables() { // Don't even think about to start recursing! if (mInExecuteAfterPrepareSurfacesRunnables) { return; } mInExecuteAfterPrepareSurfacesRunnables = true; // Traverse in order they were added. final int size = mAfterPrepareSurfacesRunnables.size(); Loading @@ -438,5 +452,6 @@ public class WindowAnimator { mAfterPrepareSurfacesRunnables.get(i).run(); } mAfterPrepareSurfacesRunnables.clear(); mInExecuteAfterPrepareSurfacesRunnables = false; } } Loading
services/core/java/com/android/server/wm/RemoteAnimationController.java +11 −7 Original line number Diff line number Diff line Loading @@ -96,13 +96,17 @@ class RemoteAnimationController { // Scale the timeout with the animator scale the controlling app is using. mHandler.postDelayed(mTimeoutRunnable, (long) (TIMEOUT_MS * mService.getCurrentAnimatorScale())); final RemoteAnimationTarget[] animations = createAnimations(); mService.mAnimator.addAfterPrepareSurfacesRunnable(() -> { try { mRemoteAnimationAdapter.getRunner().onAnimationStart(createAnimations(), mRemoteAnimationAdapter.getRunner().onAnimationStart(animations, mFinishedCallback); } catch (RemoteException e) { Slog.e(TAG, "Failed to start remote animation", e); onAnimationFinished(); } }); } private RemoteAnimationTarget[] createAnimations() { Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +2 −0 Original line number Diff line number Diff line Loading @@ -588,6 +588,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces"); } mService.mAnimator.executeAfterPrepareSurfacesRunnables(); final WindowSurfacePlacer surfacePlacer = mService.mWindowPlacerLocked; // If we are ready to perform an app transition, check through all of the app tokens to be Loading
services/core/java/com/android/server/wm/WindowAnimator.java +16 −1 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ public class WindowAnimator { * executed and the corresponding transaction is closed and applied. */ private final ArrayList<Runnable> mAfterPrepareSurfacesRunnables = new ArrayList<>(); private boolean mInExecuteAfterPrepareSurfacesRunnables; WindowAnimator(final WindowManagerService service) { mService = service; Loading Loading @@ -426,11 +427,24 @@ public class WindowAnimator { * the corresponding transaction is closed and applied. */ void addAfterPrepareSurfacesRunnable(Runnable r) { // If runnables are already being handled in executeAfterPrepareSurfacesRunnable, then just // immediately execute the runnable passed in. if (mInExecuteAfterPrepareSurfacesRunnables) { r.run(); return; } mAfterPrepareSurfacesRunnables.add(r); scheduleAnimation(); } private void executeAfterPrepareSurfacesRunnables() { void executeAfterPrepareSurfacesRunnables() { // Don't even think about to start recursing! if (mInExecuteAfterPrepareSurfacesRunnables) { return; } mInExecuteAfterPrepareSurfacesRunnables = true; // Traverse in order they were added. final int size = mAfterPrepareSurfacesRunnables.size(); Loading @@ -438,5 +452,6 @@ public class WindowAnimator { mAfterPrepareSurfacesRunnables.get(i).run(); } mAfterPrepareSurfacesRunnables.clear(); mInExecuteAfterPrepareSurfacesRunnables = false; } }