summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/etc/services.core.protolog.json18
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java30
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java12
3 files changed, 36 insertions, 24 deletions
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index bfc623faeaef..33ab16de7905 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -1663,12 +1663,6 @@
"group": "WM_SHOW_SURFACE_ALLOC",
"at": "com\/android\/server\/wm\/ScreenRotationAnimation.java"
},
- "1108406230": {
- "message": "stopFreezingDisplayLocked: Returning mWaitingForConfig=%b, mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, mClientFreezingScreen=%b, mOpeningApps.size()=%d",
- "level": "DEBUG",
- "group": "WM_DEBUG_ORIENTATION",
- "at": "com\/android\/server\/wm\/WindowManagerService.java"
- },
"1112047265": {
"message": "finishDrawingWindow: %s mDrawState=%s",
"level": "DEBUG",
@@ -1729,6 +1723,12 @@
"group": "WM_DEBUG_BOOT",
"at": "com\/android\/server\/wm\/WindowManagerService.java"
},
+ "1246035185": {
+ "message": "stopFreezingDisplayLocked: Returning waitingForConfig=%b, waitingForRemoteRotation=%b, mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, mClientFreezingScreen=%b, mOpeningApps.size()=%d",
+ "level": "DEBUG",
+ "group": "WM_DEBUG_ORIENTATION",
+ "at": "com\/android\/server\/wm\/WindowManagerService.java"
+ },
"1254403969": {
"message": "Surface returned was null: %s",
"level": "VERBOSE",
@@ -1951,12 +1951,6 @@
"group": "WM_DEBUG_APP_TRANSITIONS_ANIM",
"at": "com\/android\/server\/wm\/AppTransition.java"
},
- "1591969812": {
- "message": "updateImeControlTarget %s",
- "level": "INFO",
- "group": "WM_DEBUG_IME",
- "at": "com\/android\/server\/wm\/DisplayContent.java"
- },
"1628345525": {
"message": "Now opening app %s",
"level": "VERBOSE",
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index b1756b07ad83..f4281fc0cafd 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -5606,17 +5606,28 @@ public class WindowManagerService extends IWindowManager.Stub
}
final DisplayContent displayContent = mRoot.getDisplayContent(mFrozenDisplayId);
- final boolean waitingForConfig = displayContent != null && displayContent.mWaitingForConfig;
- final int numOpeningApps = displayContent != null ? displayContent.mOpeningApps.size() : 0;
- if (waitingForConfig || mAppsFreezingScreen > 0
+ final int numOpeningApps;
+ final boolean waitingForConfig;
+ final boolean waitingForRemoteRotation;
+ if (displayContent != null) {
+ numOpeningApps = displayContent.mOpeningApps.size();
+ waitingForConfig = displayContent.mWaitingForConfig;
+ waitingForRemoteRotation =
+ displayContent.getDisplayRotation().isWaitingForRemoteRotation();
+ } else {
+ waitingForConfig = waitingForRemoteRotation = false;
+ numOpeningApps = 0;
+ }
+ if (waitingForConfig || waitingForRemoteRotation || mAppsFreezingScreen > 0
|| mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_ACTIVE
|| mClientFreezingScreen || numOpeningApps > 0) {
- ProtoLog.d(WM_DEBUG_ORIENTATION,
- "stopFreezingDisplayLocked: Returning mWaitingForConfig=%b, "
- + "mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, "
- + "mClientFreezingScreen=%b, mOpeningApps.size()=%d",
- waitingForConfig, mAppsFreezingScreen, mWindowsFreezingScreen,
- mClientFreezingScreen, numOpeningApps);
+ ProtoLog.d(WM_DEBUG_ORIENTATION, "stopFreezingDisplayLocked: Returning "
+ + "waitingForConfig=%b, waitingForRemoteRotation=%b, "
+ + "mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, "
+ + "mClientFreezingScreen=%b, mOpeningApps.size()=%d",
+ waitingForConfig, waitingForRemoteRotation,
+ mAppsFreezingScreen, mWindowsFreezingScreen,
+ mClientFreezingScreen, numOpeningApps);
return;
}
@@ -5627,7 +5638,6 @@ public class WindowManagerService extends IWindowManager.Stub
// We must make a local copy of the displayId as it can be potentially overwritten later on
// in this method. For example, {@link startFreezingDisplayLocked} may be called as a result
// of update rotation, but we reference the frozen display after that call in this method.
- final int displayId = mFrozenDisplayId;
mFrozenDisplayId = INVALID_DISPLAY;
mDisplayFrozen = false;
mInputManagerCallback.thawInputDispatchingLw();
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 30af1d34f558..ddb186a1d2da 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -1328,9 +1328,10 @@ public class DisplayContentTests extends WindowTestsBase {
final DisplayRotation dr = dc.getDisplayRotation();
doCallRealMethod().when(dr).updateRotationUnchecked(anyBoolean());
- Mockito.doReturn(ROTATION_90).when(dr).rotationForOrientation(anyInt(), anyInt());
+ // Rotate 180 degree so the display doesn't have configuration change. This condition is
+ // used for the later verification of stop-freezing (without setting mWaitingForConfig).
+ doReturn((dr.getRotation() + 2) % 4).when(dr).rotationForOrientation(anyInt(), anyInt());
final boolean[] continued = new boolean[1];
- // TODO(display-merge): Remove cast
doAnswer(
invocation -> {
continued[0] = true;
@@ -1356,9 +1357,16 @@ public class DisplayContentTests extends WindowTestsBase {
dc.setRotationAnimation(null);
mWm.updateRotation(true /* alwaysSendConfiguration */, false /* forceRelayout */);
+ // If remote rotation is not finished, the display should not be able to unfreeze.
+ mWm.stopFreezingDisplayLocked();
+ assertTrue(mWm.mDisplayFrozen);
+
assertTrue(called[0]);
waitUntilHandlersIdle();
assertTrue(continued[0]);
+
+ mWm.stopFreezingDisplayLocked();
+ assertFalse(mWm.mDisplayFrozen);
}
@Test