Minor updates to startup scripts

Change-Id: I397dfd95f3410d9285a50e221e560d3a0f7bcdac
diff --git a/tools/startup/measure_startup.py b/tools/startup/measure_startup.py
index 1b94fad..99f988d 100755
--- a/tools/startup/measure_startup.py
+++ b/tools/startup/measure_startup.py
@@ -66,7 +66,9 @@
   print('Average result:')
   data_summary = compute_data_summary(data_total)
   print(data_summary)
-  write_data(options.out_dir, data_summary)
+  write_data_to_dir(options.out_dir, data_summary)
+  if options.out:
+    write_data_to_file(options.out, data_summary)
 
 def compute_data_summary(data_total):
   data_summary = {}
@@ -76,6 +78,8 @@
       continue
     data_summary['%s_avg' % key] = round(statistics.mean(value), 1)
     data_summary['%s_med' % key] = statistics.median(value)
+    data_summary['%s_min' % key] = min(value)
+    data_summary['%s_max' % key] = max(value)
   return data_summary
 
 def setup_for_run(apk_or_apks, out_dir, options):
@@ -96,7 +100,13 @@
     print('AOT compiling')
     if options.baseline_profile:
       adb_utils.clear_profile_data(options.app_id, options.device_id)
-      adb_utils.install_profile(options.app_id, options.device_id)
+      if options.baseline_profile_install == 'adb':
+        adb_utils.install_profile_using_adb(
+            options.app_id, options.baseline_profile, options.device_id)
+      else:
+        assert options.baseline_profile_install == 'profileinstaller'
+        adb_utils.install_profile_using_profileinstaller(
+            options.app_id, options.device_id)
     else:
       adb_utils.force_compilation(options.app_id, options.device_id)
 
@@ -181,7 +191,7 @@
   # Get minor and major page faults from app process.
   data = compute_data(
     launch_activity_result, logcat, perfetto_trace_path, options)
-  write_data(out_dir, data)
+  write_data_to_dir(out_dir, data)
   return data
 
 def wait_until_fully_drawn(logcat_process, options):
@@ -305,9 +315,12 @@
   # Return combined startup data.
   return startup_data | perfetto_startup_data
 
-def write_data(out_dir, data):
+def write_data_to_dir(out_dir, data):
   data_path = os.path.join(out_dir, 'data.txt')
-  with open(data_path, 'w') as f:
+  write_data_to_file(data_path, data)
+
+def write_data_to_file(out_file, data):
+  with open(out_file, 'w') as f:
     for key, value in data.items():
       f.write('%s=%s\n' % (key, str(value)))
 
@@ -321,10 +334,6 @@
                       help='Enable force compilation',
                       default=False,
                       action='store_true')
-  result.add_argument('--aot-profile',
-                      help='Enable force compilation using profiles',
-                      default=False,
-                      action='store_true')
   result.add_argument('--apk',
                       help='Path to the .apk')
   result.add_argument('--apks',
@@ -367,11 +376,21 @@
                       help='Disables perfetto trace generation',
                       action='store_true',
                       default=False)
+  result.add_argument('--out',
+                      help='File to store result in')
   result.add_argument('--out-dir',
                       help='Directory to store trace files in',
                       required=True)
   result.add_argument('--baseline-profile',
-                      help='Baseline profile to install')
+                      help='Baseline profile (.prof) in binary format')
+  result.add_argument('--baseline-profile-metadata',
+                      help='Baseline profile metadata (.profm) in binary '
+                           'format')
+  result.add_argument('--baseline-profile-install',
+                      help='Whether to install profile using adb or '
+                           'profileinstaller',
+                      choices=['adb', 'profileinstaller'],
+                      default='profileinstaller')
   result.add_argument('--startup-duration',
                       help='Duration in seconds before shutting down app',
                       default=15,
@@ -424,10 +443,14 @@
   (options, args) = parse_options(argv)
   with utils.TempDir() as tmp_dir:
     apk_or_apks = { 'apk': options.apk, 'apks': options.apks }
-    if options.baseline_profile:
+    if options.baseline_profile \
+        and options.baseline_profile_install == 'profileinstaller':
       assert not options.apks, 'Unimplemented'
       apk_or_apks['apk'] = apk_utils.add_baseline_profile_to_apk(
-          options.apk, options.baseline_profile, tmp_dir)
+          options.apk,
+          options.baseline_profile,
+          options.baseline_profile_metadata,
+          tmp_dir)
     teardown_options = global_setup(options)
     run_all(apk_or_apks, options, tmp_dir)
     global_teardown(options, teardown_options)