|  | #!/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) |