Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f0c20e8 authored by Mathieu Chartier's avatar Mathieu Chartier Committed by android-build-merger
Browse files

Merge "Add retry loop for BootImageProfileTest"

am: f9cb43d6

Change-Id: Ie04518394d9980e1cbd87048ecc6bd7359f05625
parents c020ac02 f9cb43d6
Loading
Loading
Loading
Loading
+47 −33
Original line number Diff line number Diff line
@@ -73,20 +73,22 @@ public class BootImageProfileTest implements IDeviceTest {
        res = mTestDevice.executeShellCommand("truncate -s 0 " + SYSTEM_SERVER_PROFILE).trim();
        assertTrue(res, res.length() == 0);
        // 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.
            if (forceSaveProfile("system_server")) {
                // Might fail if system server is not yet running.
                String s = mTestDevice.executeShellCommand(
                        "wc -c <" + SYSTEM_SERVER_PROFILE).trim();
                if (!"0".equals(s)) {
                    break;
                }
            }
                if ("0".equals(s)) {
                    Thread.sleep(1000);
                    continue;
                }
            }

            // In case the profile is partially saved, wait an extra second.
            Thread.sleep(1000);

            // Validate that the profile is non empty.
            res = mTestDevice.executeShellCommand("profman --dump-only --profile-file="
                    + SYSTEM_SERVER_PROFILE);
@@ -99,13 +101,18 @@ public class BootImageProfileTest implements IDeviceTest {
                    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 services.jar in " + res, sawServices);
            }


        // Test the profile contents contain common methods for core-oj that would normally be AOT
        // compiled.
        res = mTestDevice.executeShellCommand("profman --dump-classes-and-methods --profile-file="
            // Test the profile contents contain common methods for core-oj that would normally be
            // AOT compiled. Also test that services.jar has PackageManagerService.<init> since the
            // package manager service should always be created during boot.
            res = mTestDevice.executeShellCommand(
                    "profman --dump-classes-and-methods --profile-file="
                    + SYSTEM_SERVER_PROFILE + " --apk=/apex/com.android.art/javalib/core-oj.jar"
                    + " --apk=/system/framework/services.jar");
            boolean sawObjectInit = false;
@@ -117,7 +124,14 @@ public class BootImageProfileTest implements IDeviceTest {
                    sawPmInit = true;
                }
            }
            if (i == numIterations) {
                assertTrue("Did not see Object.<init> in " + res, sawObjectInit);
                assertTrue("Did not see PackageManagerService.<init> in " + res, sawPmInit);
            }

            if (sawFramework && sawServices && sawObjectInit && sawPmInit) {
                break;  // Asserts passed, exit.
            }
        }
    }
}