Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file |
| 3 | # for details. All rights reserved. Use of this source code is governed by a |
| 4 | # BSD-style license that can be found in the LICENSE file. |
| 5 | |
| 6 | import argparse |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 7 | import os |
| 8 | import subprocess |
| 9 | import sys |
| 10 | import time |
Ian Zerny | 859dd89 | 2020-07-03 11:19:03 +0200 | [diff] [blame] | 11 | |
| 12 | import golem |
| 13 | import jdk |
| 14 | import proguard |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 15 | import utils |
| 16 | |
| 17 | RETRACERS = ['r8', 'proguard', 'remapper'] |
| 18 | |
| 19 | def parse_arguments(argv): |
| 20 | parser = argparse.ArgumentParser( |
| 21 | description = 'Run r8 retrace bootstrap benchmarks.') |
| 22 | parser.add_argument('--golem', |
| 23 | help = 'Link in third party dependencies.', |
| 24 | default = False, |
| 25 | action = 'store_true') |
| 26 | parser.add_argument('--ignore-java-version', |
| 27 | help='Do not check java version', |
| 28 | default=False, |
| 29 | action='store_true') |
| 30 | parser.add_argument('--print-runtimeraw', |
| 31 | metavar='BENCHMARKNAME', |
| 32 | help='Print the line \'<BENCHMARKNAME>(RunTimeRaw):' + |
| 33 | ' <elapsed> ms\' at the end where <elapsed> is' + |
| 34 | ' the elapsed time in milliseconds.') |
| 35 | parser.add_argument('--retracer', |
| 36 | help='The retracer to use', |
| 37 | choices=RETRACERS, |
| 38 | required=True) |
Morten Krogh-Jespersen | 8f92e33 | 2020-08-21 08:59:24 +0200 | [diff] [blame] | 39 | parser.add_argument('--download-benchmarks', |
| 40 | help='Download retrace benchmarks', |
| 41 | default=False, |
| 42 | action='store_true') |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 43 | options = parser.parse_args(argv) |
| 44 | return options |
| 45 | |
Morten Krogh-Jespersen | 8f92e33 | 2020-08-21 08:59:24 +0200 | [diff] [blame] | 46 | def download_benchmarks(): |
| 47 | utils.DownloadFromGoogleCloudStorage( |
| 48 | os.path.join(utils.THIRD_PARTY, 'retrace_benchmark') + '.tar.gz.sha1') |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 49 | |
| 50 | def run_retrace(options, temp): |
Morten Krogh-Jespersen | 8f92e33 | 2020-08-21 08:59:24 +0200 | [diff] [blame] | 51 | if options.download_benchmarks: |
| 52 | download_benchmarks() |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 53 | if options.retracer == 'r8': |
| 54 | retracer_args = [ |
| 55 | '-cp', utils.R8LIB_JAR, 'com.android.tools.r8.retrace.Retrace'] |
| 56 | elif options.retracer == 'proguard': |
Ian Zerny | 859dd89 | 2020-07-03 11:19:03 +0200 | [diff] [blame] | 57 | retracer_args = ['-jar', proguard.getRetraceJar()] |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 58 | elif options.retracer == 'remapper': |
| 59 | retracer_args = ['-jar', |
| 60 | os.path.join( |
| 61 | utils.THIRD_PARTY, |
| 62 | 'remapper', |
| 63 | 'remapper_deploy.jar')] |
| 64 | else: |
| 65 | assert False, "Unexpected retracer " + options.retracer |
| 66 | retrace_args = [jdk.GetJavaExecutable()] + retracer_args + [ |
| 67 | os.path.join(utils.THIRD_PARTY, 'retrace_benchmark', 'r8lib.jar.map'), |
| 68 | os.path.join(utils.THIRD_PARTY, 'retrace_benchmark', 'stacktrace.txt')] |
| 69 | utils.PrintCmd(retrace_args) |
| 70 | t0 = time.time() |
Rico Wind | 69d5b0e | 2020-04-06 10:56:23 +0200 | [diff] [blame] | 71 | subprocess.check_call(retrace_args) |
Morten Krogh-Jespersen | afd858c | 2020-03-11 11:09:19 +0100 | [diff] [blame] | 72 | t1 = time.time() |
| 73 | if options.print_runtimeraw: |
| 74 | print('{}(RunTimeRaw): {} ms' |
| 75 | .format(options.print_runtimeraw, 1000.0 * (t1 - t0))) |
| 76 | |
| 77 | |
| 78 | if __name__ == '__main__': |
| 79 | options = parse_arguments(sys.argv[1:]) |
| 80 | if options.golem: |
| 81 | golem.link_third_party() |
| 82 | if not options.ignore_java_version: |
| 83 | utils.check_java_version() |
| 84 | with utils.TempDir() as temp: |
| 85 | run_retrace(options, temp) |