Merge "Add retry loop for BootImageProfileTest" am: f9cb43d6eb

am: 1f0c20e85f

Change-Id: I3e39338cfef91ca89c54d172a41a23a70b1e19bd
This commit is contained in:
Mathieu Chartier
2019-11-11 15:46:05 -08:00
committed by android-build-merger

View File

@@ -73,20 +73,22 @@ public class BootImageProfileTest implements IDeviceTest {
res = mTestDevice.executeShellCommand("truncate -s 0 " + SYSTEM_SERVER_PROFILE).trim(); res = mTestDevice.executeShellCommand("truncate -s 0 " + SYSTEM_SERVER_PROFILE).trim();
assertTrue(res, res.length() == 0); assertTrue(res, res.length() == 0);
// Wait up to 20 seconds for the profile to be saved. // Wait up to 20 seconds for the profile to be saved.
for (int i = 0; i < 20; ++i) { final int numIterations = 20;
for (int i = 1; i <= numIterations; ++i) {
// Force save the profile since we truncated it. // Force save the profile since we truncated it.
if (forceSaveProfile("system_server")) { if (forceSaveProfile("system_server")) {
// Might fail if system server is not yet running. // Might fail if system server is not yet running.
String s = mTestDevice.executeShellCommand( String s = mTestDevice.executeShellCommand(
"wc -c <" + SYSTEM_SERVER_PROFILE).trim(); "wc -c <" + SYSTEM_SERVER_PROFILE).trim();
if (!"0".equals(s)) { if ("0".equals(s)) {
break;
}
}
Thread.sleep(1000); Thread.sleep(1000);
continue;
} }
}
// In case the profile is partially saved, wait an extra second. // In case the profile is partially saved, wait an extra second.
Thread.sleep(1000); Thread.sleep(1000);
// Validate that the profile is non empty. // Validate that the profile is non empty.
res = mTestDevice.executeShellCommand("profman --dump-only --profile-file=" res = mTestDevice.executeShellCommand("profman --dump-only --profile-file="
+ SYSTEM_SERVER_PROFILE); + SYSTEM_SERVER_PROFILE);
@@ -99,13 +101,18 @@ public class BootImageProfileTest implements IDeviceTest {
sawServices = true; sawServices = true;
} }
} }
if (i == numIterations) {
// Only assert for last iteration since there are race conditions where the package
// manager might not be started whewn the profile saves.
assertTrue("Did not see framework.jar in " + res, sawFramework); assertTrue("Did not see framework.jar in " + res, sawFramework);
assertTrue("Did not see services.jar in " + res, sawServices); assertTrue("Did not see services.jar in " + res, sawServices);
}
// Test the profile contents contain common methods for core-oj that would normally be
// Test the profile contents contain common methods for core-oj that would normally be AOT // AOT compiled. Also test that services.jar has PackageManagerService.<init> since the
// compiled. // package manager service should always be created during boot.
res = mTestDevice.executeShellCommand("profman --dump-classes-and-methods --profile-file=" res = mTestDevice.executeShellCommand(
"profman --dump-classes-and-methods --profile-file="
+ SYSTEM_SERVER_PROFILE + " --apk=/apex/com.android.art/javalib/core-oj.jar" + SYSTEM_SERVER_PROFILE + " --apk=/apex/com.android.art/javalib/core-oj.jar"
+ " --apk=/system/framework/services.jar"); + " --apk=/system/framework/services.jar");
boolean sawObjectInit = false; boolean sawObjectInit = false;
@@ -117,7 +124,14 @@ public class BootImageProfileTest implements IDeviceTest {
sawPmInit = true; sawPmInit = true;
} }
} }
if (i == numIterations) {
assertTrue("Did not see Object.<init> in " + res, sawObjectInit); assertTrue("Did not see Object.<init> in " + res, sawObjectInit);
assertTrue("Did not see PackageManagerService.<init> in " + res, sawPmInit); assertTrue("Did not see PackageManagerService.<init> in " + res, sawPmInit);
} }
if (sawFramework && sawServices && sawObjectInit && sawPmInit) {
break; // Asserts passed, exit.
}
}
}
} }