From f02cec7434b0be84b99628772165a0203beee63a Mon Sep 17 00:00:00 2001 From: Yasin Kilicdere Date: Fri, 26 Aug 2022 18:20:18 +0100 Subject: [PATCH] Wait for broadcast idle before runThenWaits containing resumeTiming. Some of the runThenWaitForBroadcasts, runThenWaitUntilBootCompleted, runThenWaitUntilSwitchCompleted methods contain mRunner.resumeTiming() inside their runnables in order to exclude initialisation of those methods from timing. But then since mRunner.resumeTiming() calls wait-for-broadcast-idle, that sometimes cause helper waiters to fail with timeouts. To prevent that flakiness, this CL makes sure the broadcast queue is idle before calling those helper waiters. Bug: 200217686 Test: atest MultiUserPerfTests:android.multiuser.UserLifecycleTests --no-bazel-mode Change-Id: Iec97d314f661c9656c46873a641ef6b496dd260d --- .../src/android/multiuser/UserLifecycleTests.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java index a65205500651d..aec60f250f6ff 100644 --- a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java +++ b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java @@ -208,6 +208,8 @@ public class UserLifecycleTests { while (mRunner.keepRunning()) { mRunner.pauseTiming(); final int userId = createUserNoFlags(); + + waitForBroadcastIdle(); runThenWaitForBroadcasts(userId, () -> { mRunner.resumeTiming(); Log.i(TAG, "Starting timer"); @@ -335,6 +337,7 @@ public class UserLifecycleTests { final int startUser = mAm.getCurrentUser(); final int userId = createUserNoFlags(); + waitForBroadcastIdle(); mUserSwitchWaiter.runThenWaitUntilBootCompleted(userId, () -> { mRunner.resumeTiming(); Log.i(TAG, "Starting timer"); @@ -360,6 +363,7 @@ public class UserLifecycleTests { switchUser(userId); }, Intent.ACTION_MEDIA_MOUNTED); + waitForBroadcastIdle(); mUserSwitchWaiter.runThenWaitUntilSwitchCompleted(startUser, () -> { runThenWaitForBroadcasts(userId, () -> { mRunner.resumeTiming(); @@ -685,7 +689,7 @@ public class UserLifecycleTests { */ private void stopUserAfterWaitingForBroadcastIdle(int userId, boolean force) throws RemoteException { - ShellHelper.runShellCommand("am wait-for-broadcast-idle"); + waitForBroadcastIdle(); stopUser(userId, force); } @@ -894,4 +898,8 @@ public class UserLifecycleTests { assertEquals("", ShellHelper.runShellCommand("setprop " + name + " " + value)); return oldValue; } + + private void waitForBroadcastIdle() { + ShellHelper.runShellCommand("am wait-for-broadcast-idle"); + } }