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

Commit 81eac039 authored by Mathieu Chartier's avatar Mathieu Chartier Committed by Android (Google) Code Review
Browse files

Merge "Add retry loop for BootImageProfileTest"

parents 4857c1f9 233c3395
Loading
Loading
Loading
Loading
+49 −35
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);
@@ -94,20 +96,25 @@ public class BootImageProfileTest implements IDeviceTest {
            boolean sawServices = false;
            for (String line : res.split("\n")) {
                if (line.contains("framework.jar")) {
                sawFramework = true;  // Legacy
                    sawFramework = true;
                } else if (line.contains("framework-minus-apex.jar")) {
                    sawFramework = true;
                } else if (line.contains("services.jar")) {
                    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;
@@ -119,7 +126,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.
            }
        }
    }
}