Merge "Fix typo in comment"
diff --git a/prod-tests/src/com/android/performance/tests/AppInstallTest.java b/prod-tests/src/com/android/performance/tests/AppInstallTest.java
index ac85b3b..684722c 100644
--- a/prod-tests/src/com/android/performance/tests/AppInstallTest.java
+++ b/prod-tests/src/com/android/performance/tests/AppInstallTest.java
@@ -25,6 +25,7 @@
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.util.AaptParser;
+import com.android.tradefed.util.RunUtil;
 import com.android.tradefed.util.proto.TfMetricProtoUtil;
 import java.io.File;
 import java.util.HashMap;
@@ -60,6 +61,10 @@
     )
     private boolean mUseDexMetadata = false;
 
+    @Option(name = "test-delay-between-installs",
+            description = "Delay in ms to wait for before starting the install test.")
+    private long mTestDelayBetweenInstalls = 5000;
+
     @Option(
         name = "test-dex-metadata-variant",
         description =
@@ -106,12 +111,9 @@
 
         // Delay test start time to give the background processes to finish.
         if (mTestStartDelay > 0) {
-            try {
-                Thread.sleep(mTestStartDelay);
-            } catch (InterruptedException e) {
-                CLog.e("Failed to delay test: %s", e.toString());
-            }
+            RunUtil.getDefault().sleep(mTestStartDelay);
         }
+
         Assert.assertFalse(mTestApkPath.isEmpty());
         File apkDir = new File(mTestApkPath);
         Assert.assertTrue(apkDir.isDirectory());
@@ -126,8 +128,11 @@
                 }
                 File file = new File(apkDir, fileName);
                 // Install app and measure time.
-                String installTime = Long.toString(installAndTime(file));
-                metrics.put(fileName, installTime);
+                long installTime = installAndTime(file);
+                if (installTime > 0) {
+                    metrics.put(fileName, Long.toString(installTime));
+                }
+                RunUtil.getDefault().sleep(mTestDelayBetweenInstalls);
             }
         } finally {
             reportMetrics(listener, mTestLabel, metrics);
@@ -142,11 +147,16 @@
      */
     long installAndTime(File packageFile) throws DeviceNotAvailableException {
         AaptParser parser = AaptParser.parse(packageFile);
+        if (parser == null) {
+            CLog.e("Failed to parse %s", packageFile);
+            return -1;
+        }
         String packageName = parser.getPackageName();
 
         String remotePath = "/data/local/tmp/" + packageFile.getName();
         if (!mDevice.pushFile(packageFile, remotePath)) {
-            throw new RuntimeException("Failed to push " + packageFile.getAbsolutePath());
+            CLog.e("Failed to push %s", packageFile);
+            return -1;
         }
 
         String dmRemotePath = null;
@@ -154,7 +164,8 @@
             File dexMetadataFile = getDexMetadataFile(packageFile);
             dmRemotePath = "/data/local/tmp/" + dexMetadataFile.getName();
             if (!mDevice.pushFile(dexMetadataFile, dmRemotePath)) {
-                throw new RuntimeException("Failed to push " + dexMetadataFile.getAbsolutePath());
+                CLog.e("Failed to push %s", dexMetadataFile);
+                return -1;
             }
         }