Merge changes Iba48c173,If0a71607 into rvc-dev

* changes:
  Use shell commands instead of ITestDevice for BootImageProfile test
  Make BootImageProfileTest less flaky
diff --git a/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java b/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
index 1c8b6be..61f3dba 100644
--- a/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
+++ b/tests/BootImageProfileTest/src/com/android/bootimageprofile/BootImageProfileTest.java
@@ -30,6 +30,7 @@
     private ITestDevice mTestDevice;
     private static final String SYSTEM_SERVER_PROFILE =
             "/data/misc/profiles/cur/0/android/primary.prof";
+    private static final boolean USE_PHENOTYPE = false;
 
     @Override
     public void setDevice(ITestDevice testDevice) {
@@ -41,16 +42,33 @@
         return mTestDevice;
     }
 
+    private String getProperty(String property) throws Exception {
+        if (USE_PHENOTYPE) {
+            return mTestDevice.getProperty("persist.device_config.runtime_native_boot."
+                    + property);
+        } else {
+            return mTestDevice.executeShellCommand("getprop dalvik.vm." + property).trim();
+        }
+    }
+
+    private String setProperty(String property, String value) throws Exception {
+        if (USE_PHENOTYPE) {
+            return mTestDevice.executeShellCommand(
+                "device_config put runtime_native_boot " + property + " " + value);
+        } else {
+            return mTestDevice.executeShellCommand(
+                "setprop dalvik.vm." + property + " " + value);
+        }
+    }
+
     /**
      * Validate that the boot image profile properties are set.
      */
     public void validateProperties() throws Exception {
-        String res = mTestDevice.getProperty(
-                "persist.device_config.runtime_native_boot.profilebootclasspath");
-        assertTrue("profile boot class path not enabled", res != null && res.equals("true"));
-        res = mTestDevice.getProperty(
-                "persist.device_config.runtime_native_boot.profilesystemserver");
-        assertTrue("profile system server not enabled", res != null && res.equals("true"));
+        String res = getProperty("profilebootclasspath");
+        assertTrue("profile boot class path not enabled: " + res, "true".equals(res));
+        res = getProperty("profilesystemserver");
+        assertTrue("profile system server not enabled: " + res, "true".equals(res));
     }
 
     private boolean forceSaveProfile(String pkg) throws Exception {
@@ -67,33 +85,48 @@
     @Test
     public void testSystemServerProfile() throws Exception {
         final int numIterations = 20;
+        String res;
+        // Set properties and wait for them to be readable.
         for (int i = 1; i <= numIterations; ++i) {
-            String res;
-            res = mTestDevice.getProperty(
-                    "persist.device_config.runtime_native_boot.profilebootclasspath");
-            boolean profileBootClassPath = res != null && res.equals("true");
-            res = mTestDevice.getProperty(
-                    "persist.device_config.runtime_native_boot.profilesystemserver");
-            boolean profileSystemServer = res != null && res.equals("true");
+            String pbcp = getProperty("profilebootclasspath");
+            boolean profileBootClassPath = "true".equals(pbcp);
+            String pss = getProperty("profilesystemserver");
+            boolean profileSystemServer = "true".equals(pss);
             if (profileBootClassPath && profileSystemServer) {
                 break;
             }
             if (i == numIterations) {
-                assertTrue("profile system server not enabled", profileSystemServer);
-                assertTrue("profile boot class path not enabled", profileSystemServer);
+                assertTrue("profile system server not enabled: " + pss, profileSystemServer);
+                assertTrue("profile boot class path not enabled: " + pbcp, profileBootClassPath);
             }
 
-            res = mTestDevice.executeShellCommand(
-                    "device_config put runtime_native_boot profilebootclasspath true");
-            res = mTestDevice.executeShellCommand(
-                    "device_config put runtime_native_boot profilesystemserver true");
-            res = mTestDevice.executeShellCommand("stop");
-            res = mTestDevice.executeShellCommand("start");
-            Thread.sleep(5000);
+            setProperty("profilebootclasspath", "true");
+            setProperty("profilesystemserver", "true");
+            Thread.sleep(1000);
         }
+
+        // Restart shell and wait for system boot.
+        res = mTestDevice.executeShellCommand("stop");
+        assertTrue("stop shell: " + res, res.length() == 0);
+        res = mTestDevice.executeShellCommand("start");
+        assertTrue("start shell: " + res, res.length() == 0);
+        for (int i = 1; i <= numIterations; ++i) {
+            String pbcp = getProperty("profilebootclasspath");
+            boolean profileBootClassPath = "true".equals(pbcp);
+            String pss = getProperty("profilesystemserver");
+            boolean profileSystemServer = "true".equals(pss);
+            if (profileBootClassPath && profileSystemServer) {
+                break;
+            }
+            if (i == numIterations) {
+                assertTrue("profile system server not enabled: " + pss, profileSystemServer);
+                assertTrue("profile boot class path not enabled: " + pbcp, profileBootClassPath);
+            }
+            Thread.sleep(1000);
+        }
+
         // Trunacte the profile before force it to be saved to prevent previous profiles
         // causing the test to pass.
-        String res;
         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.