diff --git a/adb/device.py b/adb/device.py index b6eaad63f..a15675b80 100644 --- a/adb/device.py +++ b/adb/device.py @@ -170,8 +170,12 @@ class AndroidDevice(object): out, _ = p.communicate() return self._parse_shell_output(out) - def install(self, filename): - return self._simple_call(['install', filename]) + def install(self, filename, replace=False): + cmd = ['install'] + if replace: + cmd.append('-r') + cmd.append(filename) + return self._simple_call(cmd) def push(self, local, remote): return self._simple_call(['push', local, remote]) diff --git a/init/perfboot.py b/init/perfboot.py index 583d640ef..b0efb1183 100755 --- a/init/perfboot.py +++ b/init/perfboot.py @@ -40,6 +40,7 @@ $ ./perfboot.py --iterations=30 -v --output=data.tsv --tags=eventtags.txt import argparse import atexit import cStringIO +import glob import inspect import logging import math @@ -408,9 +409,17 @@ def parse_args(): 'event tags are read. Every line contains one event ' 'tag and the last event tag is used to detect that ' 'the device has finished booting.') + parser.add_argument('--apk-dir', help='Specify the directory which contains ' + 'APK files to be installed before measuring boot time.') return parser.parse_args() +def install_apks(device, apk_dir): + for apk in glob.glob(os.path.join(apk_dir, '*.apk')): + print 'Installing: ' + apk + device.install(apk, replace=True) + + def main(): args = parse_args() if args.verbose: @@ -425,6 +434,9 @@ def main(): device.get_prop('ro.build.version.incremental')) check_dm_verity_settings(device) + if args.apk_dir: + install_apks(device, args.apk_dir) + record_list = [] event_tags = filter_event_tags(read_event_tags(args.tags), device) init_perf(device, args.output, record_list, event_tags)