Merge "Wait for remote animation to stop freezing display" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0207dba4b6
@@ -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",
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user