[Retrace] Add retrace benchmark
Bug: 149974481
Change-Id: I0718f92693f3d17021a43f8106ed9efe4ce97825
diff --git a/tools/golem.py b/tools/golem.py
index 466c3ab..586ac5e 100755
--- a/tools/golem.py
+++ b/tools/golem.py
@@ -21,6 +21,8 @@
'proguard',
'proguardsettings',
'r8',
+ 'remapper',
+ 'retrace_benchmarks',
'sample_libraries',
'youtube',
]
diff --git a/tools/retrace_benchmark.py b/tools/retrace_benchmark.py
new file mode 100755
index 0000000..5e2bd3b
--- /dev/null
+++ b/tools/retrace_benchmark.py
@@ -0,0 +1,83 @@
+#!/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 jdk
+import golem
+import os
+import subprocess
+import sys
+import time
+import toolhelper
+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',
+ os.path.join(
+ utils.THIRD_PARTY,
+ 'proguard',
+ 'proguard6.0.1',
+ 'lib',
+ 'retrace.jar')]
+ 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, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ 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)
+