From c8cc2292a6e60ec2276ea0d562dfc5711a205b41 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Thu, 15 Mar 2018 20:16:15 +0100 Subject: [PATCH] Boost thread priorities when running recents anim To improve scheduling in WM to improve latency. Bug: 73651529 Test: go/wm-smoke Test: Trace swiping up, make sure threads have right priority Change-Id: Ic35c00b70be4877abfe07de4ba1f18648cabd812 --- .../java/com/android/server/wm/AppTransition.java | 14 ++++++++++---- .../android/server/wm/WindowManagerService.java | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index f0ca2ef1747bd..93ca4dc48319f 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -469,10 +469,16 @@ public class AppTransition implements Dump { * boost the priorities to a more important value whenever an app transition is going to happen * soon or an app transition is running. */ - private void updateBooster() { - WindowManagerService.sThreadPriorityBooster.setAppTransitionRunning( - mNextAppTransition != TRANSIT_UNSET || mAppTransitionState == APP_STATE_READY - || mAppTransitionState == APP_STATE_RUNNING); + void updateBooster() { + WindowManagerService.sThreadPriorityBooster.setAppTransitionRunning(needsBoosting()); + } + + private boolean needsBoosting() { + final boolean recentsAnimRunning = mService.getRecentsAnimationController() != null; + return mNextAppTransition != TRANSIT_UNSET + || mAppTransitionState == APP_STATE_READY + || mAppTransitionState == APP_STATE_RUNNING + || recentsAnimRunning; } void registerListenerLocked(AppTransitionListener listener) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c2cc191af1d79..ea84b22a62372 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2651,6 +2651,7 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mWindowMap) { mRecentsAnimationController = new RecentsAnimationController(this, recentsAnimationRunner, callbacks, displayId); + mAppTransition.updateBooster(); mRecentsAnimationController.initialize(recentTaskIds); } } @@ -2687,6 +2688,7 @@ public class WindowManagerService extends IWindowManager.Stub if (mRecentsAnimationController != null) { mRecentsAnimationController.cleanupAnimation(); mRecentsAnimationController = null; + mAppTransition.updateBooster(); } } }