Boost android.anim and wm lock sections to -10 during transition
-4 is not enough if we have to compete against RT and main thread
from top app that have -10. Boost it more during app transitions
Test: Inspect systrace, make sure priorities are right, including
getting reset after the transition.
Test: Open Chrome 100x
Test: go/wm-smoke
Change-Id: Id6b060b8aafded67b4bae61b6e8960e37976b096
Fixes: 36631902
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 9d8f124..c1c72ca 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -313,6 +313,7 @@
mNextAppTransition = transit;
mNextAppTransitionFlags |= flags;
setLastAppTransition(TRANSIT_UNSET, null, null);
+ updateBooster();
}
void setLastAppTransition(int transit, AppWindowToken openingApp, AppWindowToken closingApp) {
@@ -327,7 +328,7 @@
}
void setReady() {
- mAppTransitionState = APP_STATE_READY;
+ setAppTransitionState(APP_STATE_READY);
fetchAppTransitionSpecsFromFuture();
}
@@ -336,7 +337,7 @@
}
void setIdle() {
- mAppTransitionState = APP_STATE_IDLE;
+ setAppTransitionState(APP_STATE_IDLE);
}
boolean isTimeout() {
@@ -344,7 +345,7 @@
}
void setTimeout() {
- mAppTransitionState = APP_STATE_TIMEOUT;
+ setAppTransitionState(APP_STATE_TIMEOUT);
}
GraphicBuffer getAppTransitionThumbnailHeader(int taskId) {
@@ -386,7 +387,7 @@
private boolean prepare() {
if (!isRunning()) {
- mAppTransitionState = APP_STATE_IDLE;
+ setAppTransitionState(APP_STATE_IDLE);
notifyAppTransitionPendingLocked();
mLastHadClipReveal = false;
mLastClipRevealMaxTranslation = 0;
@@ -405,7 +406,7 @@
ArraySet<AppWindowToken> closingApps) {
mNextAppTransition = TRANSIT_UNSET;
mNextAppTransitionFlags = 0;
- mAppTransitionState = APP_STATE_RUNNING;
+ setAppTransitionState(APP_STATE_RUNNING);
int redoLayout = notifyAppTransitionStartingLocked(transit,
topOpeningAppAnimator != null ? topOpeningAppAnimator.mAppToken.token : null,
topClosingAppAnimator != null ? topClosingAppAnimator.mAppToken.token : null,
@@ -450,6 +451,22 @@
notifyAppTransitionCancelledLocked(transit);
}
+ private void setAppTransitionState(int state) {
+ mAppTransitionState = state;
+ updateBooster();
+ }
+
+ /**
+ * Updates whether we currently boost wm locked sections and the animation thread. We want to
+ * 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 registerListenerLocked(AppTransitionListener listener) {
mListeners.add(listener);
}