Minor updates to startup scripts
Change-Id: I10332bdb6cf6db481d8fe4246a60a67c9c4379e0
diff --git a/tools/startup/adb_utils.py b/tools/startup/adb_utils.py
index 136c99a..981bcbd 100644
--- a/tools/startup/adb_utils.py
+++ b/tools/startup/adb_utils.py
@@ -91,7 +91,7 @@
def get_minor_major_page_faults(app_id, device_id=None):
pid = get_pid(app_id, device_id)
- cmd = create_adb_cmd('shell ps -p %i -o MINFL,MAJFL' % pid)
+ cmd = create_adb_cmd('shell ps -p %i -o MINFL,MAJFL' % pid, device_id)
stdout = subprocess.check_output(cmd).decode('utf-8')
lines_it = iter(stdout.splitlines())
first_line = next(lines_it)
@@ -145,7 +145,7 @@
cmd = create_adb_cmd(
'shell profman --dump-classes-and-methods'
' --profile-file=%s --apk=%s --dex-location=%s'
- % (profile_path, apk_path, apk_path))
+ % (profile_path, apk_path, apk_path), device_id)
stdout = subprocess.check_output(cmd).decode('utf-8').strip()
lines = stdout.splitlines()
classes_and_methods = []
diff --git a/tools/startup/generate_startup_descriptors.py b/tools/startup/generate_startup_descriptors.py
index a3eb72c..ea0fdf3 100755
--- a/tools/startup/generate_startup_descriptors.py
+++ b/tools/startup/generate_startup_descriptors.py
@@ -22,6 +22,7 @@
print(
'Found %i new startup descriptors in iteration %i'
% (number_of_new_startup_descriptors, iteration + 1))
+ return number_of_new_startup_descriptors
def generate_startup_profile_on_device(options):
if not options.use_existing_profile:
@@ -74,6 +75,8 @@
def parse_options(argv):
result = argparse.ArgumentParser(
description='Generate a perfetto trace file.')
+ result.add_argument('--apk',
+ help='Path to the APK')
result.add_argument('--app-id',
help='The application ID of interest',
required=True)
@@ -104,6 +107,11 @@
'descriptors are found',
action='store_true',
default=False)
+ result.add_argument('--until-stable-iterations',
+ help='Number of times that profile generation must must '
+ 'not find new startup descriptors before exiting',
+ default=1,
+ type=int)
result.add_argument('--use-existing-profile',
help='Do not launch app to generate startup profile',
action='store_true',
@@ -116,13 +124,22 @@
def main(argv):
(options, args) = parse_options(argv)
+ adb_utils.root(options.device_id)
+ if options.apk:
+ adb_utils.uninstall(options.app_id, options.device_id)
+ adb_utils.install(options.apk, options.device_id)
startup_descriptors = set()
if options.until_stable:
iteration = 0
+ stable_iterations = 0
while True:
diff = extend_startup_descriptors(startup_descriptors, iteration, options)
if diff == 0:
- break
+ stable_iterations = stable_iterations + 1
+ if stable_iterations == options.until_stable_iterations:
+ break
+ else:
+ stable_iterations = 0
iteration = iteration + 1
else:
for iteration in range(options.iterations):
diff --git a/tools/startup/trace_generator.py b/tools/startup/measure_startup.py
similarity index 95%
rename from tools/startup/trace_generator.py
rename to tools/startup/measure_startup.py
index 37f5c71..080f827 100755
--- a/tools/startup/trace_generator.py
+++ b/tools/startup/measure_startup.py
@@ -82,11 +82,14 @@
os.makedirs(out_dir, exist_ok=True)
def run(out_dir, options, tmp_dir):
- assert adb_utils.get_screen_state().is_on_and_unlocked()
+ assert adb_utils.get_screen_state(options.device_id).is_on_and_unlocked()
# Start perfetto trace collector.
- perfetto_process, perfetto_trace_path = perfetto_utils.record_android_trace(
- out_dir, tmp_dir)
+ perfetto_process = None
+ perfetto_trace_path = None
+ if not options.no_perfetto:
+ perfetto_process, perfetto_trace_path = perfetto_utils.record_android_trace(
+ out_dir, tmp_dir)
# Launch main activity.
launch_activity_result = adb_utils.launch_activity(
@@ -96,7 +99,8 @@
wait_for_activity_to_launch=True)
# Wait for perfetto trace collector to stop.
- perfetto_utils.stop_record_android_trace(perfetto_process, out_dir)
+ if not options.no_perfetto:
+ perfetto_utils.stop_record_android_trace(perfetto_process, out_dir)
# Get minor and major page faults from app process.
data = compute_data(launch_activity_result, perfetto_trace_path, options)