| #!/usr/bin/env python | |
| # Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file | |
| # for details. All rights reserved. Use of this source code is governed by a | |
| # BSD-style license that can be found in the LICENSE file. | |
| import argparse | |
| import os | |
| import subprocess | |
| import sys | |
| import time | |
| import golem | |
| import jdk | |
| import proguard | |
| import utils | |
| RETRACERS = ['r8', 'proguard', 'remapper'] | |
| def parse_arguments(argv): | |
| parser = argparse.ArgumentParser( | |
| description = 'Run r8 retrace bootstrap benchmarks.') | |
| parser.add_argument('--golem', | |
| help = 'Link in third party dependencies.', | |
| default = False, | |
| action = 'store_true') | |
| parser.add_argument('--ignore-java-version', | |
| help='Do not check java version', | |
| default=False, | |
| action='store_true') | |
| parser.add_argument('--print-runtimeraw', | |
| metavar='BENCHMARKNAME', | |
| help='Print the line \'<BENCHMARKNAME>(RunTimeRaw):' + | |
| ' <elapsed> ms\' at the end where <elapsed> is' + | |
| ' the elapsed time in milliseconds.') | |
| parser.add_argument('--retracer', | |
| help='The retracer to use', | |
| choices=RETRACERS, | |
| required=True) | |
| parser.add_argument('--download-benchmarks', | |
| help='Download retrace benchmarks', | |
| default=False, | |
| action='store_true') | |
| options = parser.parse_args(argv) | |
| return options | |
| def download_benchmarks(): | |
| utils.DownloadFromGoogleCloudStorage( | |
| os.path.join(utils.THIRD_PARTY, 'retrace_benchmark') + '.tar.gz.sha1') | |
| def run_retrace(options, temp): | |
| if options.download_benchmarks: | |
| download_benchmarks() | |
| if options.retracer == 'r8': | |
| retracer_args = [ | |
| '-cp', utils.R8LIB_JAR, 'com.android.tools.r8.retrace.Retrace'] | |
| elif options.retracer == 'proguard': | |
| retracer_args = ['-jar', proguard.getRetraceJar()] | |
| elif options.retracer == 'remapper': | |
| retracer_args = ['-jar', | |
| os.path.join( | |
| utils.THIRD_PARTY, | |
| 'remapper', | |
| 'remapper_deploy.jar')] | |
| else: | |
| assert False, "Unexpected retracer " + options.retracer | |
| retrace_args = [jdk.GetJavaExecutable()] + retracer_args + [ | |
| os.path.join(utils.THIRD_PARTY, 'retrace_benchmark', 'r8lib.jar.map'), | |
| os.path.join(utils.THIRD_PARTY, 'retrace_benchmark', 'stacktrace.txt')] | |
| utils.PrintCmd(retrace_args) | |
| t0 = time.time() | |
| subprocess.check_call(retrace_args) | |
| t1 = time.time() | |
| if options.print_runtimeraw: | |
| print('{}(RunTimeRaw): {} ms' | |
| .format(options.print_runtimeraw, 1000.0 * (t1 - t0))) | |
| if __name__ == '__main__': | |
| options = parse_arguments(sys.argv[1:]) | |
| if options.golem: | |
| golem.link_third_party() | |
| if not options.ignore_java_version: | |
| utils.check_java_version() | |
| with utils.TempDir() as temp: | |
| run_retrace(options, temp) |