Fix testConfigurationUpdatesWhenResizedFromFullscreen
Test was flaky because we didn't wait long enough for task bounds
to settle in AM and WM.
Bug: 29619461
Change-Id: If68ff067dbaac488d4eb525bba2a97f136d1d4ca
diff --git a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java
index 86d2af1..bb7f521 100644
--- a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java
+++ b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java
@@ -99,7 +99,8 @@
*/
void computeState(ITestDevice device, boolean visibleOnly, String[] waitForActivitiesVisible,
boolean compareTaskAndStackBounds) throws Exception {
- waitForValidState(device, visibleOnly, waitForActivitiesVisible, null);
+ waitForValidState(device, visibleOnly, waitForActivitiesVisible, null,
+ compareTaskAndStackBounds);
assertSanity();
assertValidBounds(compareTaskAndStackBounds);
@@ -115,12 +116,15 @@
* Pass null to skip this check.
*/
void waitForValidState(ITestDevice device, boolean visibleOnly,
- String[] waitForActivitiesVisible, int[] stackIds) throws Exception {
+ String[] waitForActivitiesVisible, int[] stackIds,
+ boolean compareTaskAndStackBounds) throws Exception {
int retriesLeft = 5;
do {
+ // TODO: Get state of AM and WM at the same time to avoid mismatches caused by
+ // requesting dump in some intermediate state.
mAmState.computeState(device);
mWmState.computeState(device, visibleOnly);
- if (shouldWaitForValidStacks()
+ if (shouldWaitForValidStacks(compareTaskAndStackBounds)
|| shouldWaitForActivities(waitForActivitiesVisible, stackIds)) {
log("***Waiting for valid stacks and activities states...");
try {
@@ -153,7 +157,7 @@
} while (retriesLeft-- > 0);
}
- private boolean shouldWaitForValidStacks() {
+ private boolean shouldWaitForValidStacks(boolean compareTaskAndStackBounds) {
if (!taskListsInAmAndWmAreEqual()) {
// We want to wait for equal task lists in AM and WM in case we caught them in the
// middle of some state change operations.
@@ -166,6 +170,14 @@
log("***stackBoundsInAMAndWMAreEqual=false");
return true;
}
+ try {
+ // Temporary fix to avoid catching intermediate state with different task bounds in AM
+ // and WM.
+ assertValidBounds(compareTaskAndStackBounds);
+ } catch (AssertionError e) {
+ log("***taskBoundsInAMAndWMAreEqual=false : " + e.getMessage());
+ return true;
+ }
return false;
}
diff --git a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerActivityVisiblityTests.java b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerActivityVisiblityTests.java
index b485377..6f527ed 100644
--- a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerActivityVisiblityTests.java
+++ b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerActivityVisiblityTests.java
@@ -33,7 +33,7 @@
public void testVisibleBehindHomeActivity() throws Exception {
executeShellCommand(getAmStartCmd(VISIBLE_BEHIND_ACTIVITY));
mAmWmState.waitForValidState(mDevice, true, new String[] {VISIBLE_BEHIND_ACTIVITY},
- new int[] {FULLSCREEN_WORKSPACE_STACK_ID});
+ new int[] {FULLSCREEN_WORKSPACE_STACK_ID}, false /* compareTaskAndStackBounds */);
executeShellCommand(AM_START_HOME_ACTIVITY_COMMAND);
mAmWmState.waitForHomeActivityVisible(mDevice);
diff --git a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerPinnedStackTests.java b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerPinnedStackTests.java
index f148b4f..7a691ec 100644
--- a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerPinnedStackTests.java
+++ b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerPinnedStackTests.java
@@ -52,7 +52,7 @@
}
mAmWmState.waitForValidState(mDevice, true, new String[] {topActivityName},
- new int[] {PINNED_STACK_ID});
+ new int[] {PINNED_STACK_ID}, false /* compareTaskAndStackBounds */);
mAmWmState.computeState(mDevice, null);
if (supportsPip()) {