blob: e29bb86e004e42e7cad8e34bb4f49ea6d0915047 [file] [log] [blame]
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +01001#!/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
6import argparse
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +01007import os
8import subprocess
9import sys
10import time
Ian Zerny859dd892020-07-03 11:19:03 +020011
12import golem
13import jdk
14import proguard
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +010015import utils
16
17RETRACERS = ['r8', 'proguard', 'remapper']
18
19def 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-Jespersen8f92e332020-08-21 08:59:24 +020039 parser.add_argument('--download-benchmarks',
40 help='Download retrace benchmarks',
41 default=False,
42 action='store_true')
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +010043 options = parser.parse_args(argv)
44 return options
45
Morten Krogh-Jespersen8f92e332020-08-21 08:59:24 +020046def download_benchmarks():
47 utils.DownloadFromGoogleCloudStorage(
48 os.path.join(utils.THIRD_PARTY, 'retrace_benchmark') + '.tar.gz.sha1')
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +010049
50def run_retrace(options, temp):
Morten Krogh-Jespersen8f92e332020-08-21 08:59:24 +020051 if options.download_benchmarks:
52 download_benchmarks()
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +010053 if options.retracer == 'r8':
54 retracer_args = [
55 '-cp', utils.R8LIB_JAR, 'com.android.tools.r8.retrace.Retrace']
56 elif options.retracer == 'proguard':
Ian Zerny859dd892020-07-03 11:19:03 +020057 retracer_args = ['-jar', proguard.getRetraceJar()]
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +010058 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 Wind69d5b0e2020-04-06 10:56:23 +020071 subprocess.check_call(retrace_args)
Morten Krogh-Jespersenafd858c2020-03-11 11:09:19 +010072 t1 = time.time()
73 if options.print_runtimeraw:
74 print('{}(RunTimeRaw): {} ms'
75 .format(options.print_runtimeraw, 1000.0 * (t1 - t0)))
76
77
78if __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)