| #!/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) | 
 |   options = parser.parse_args(argv) | 
 |   return options | 
 |  | 
 |  | 
 | def run_retrace(options, temp): | 
 |   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) |