blob: 7b21fa5516b910832fee563e67efe9523f3aced6 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (c) 2019, 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.
# Run R8 or PG on 'third_party/r8/r8.jar'.
# Report Golem-compatible CodeSize and RunTimeRaw values:
#
# <NAME>-Total(CodeSize): <size>
# <NAME>-Total(RunTimeRaw>: <time> ms
#
# and also detailed segment sizes for each classfile segment:
#
# <NAME>-Code(CodeSize): <size>
# <NAME>-AnnotationSets(CodeSize): <size>
# ...
#
# Uses the R8CfSegments Java tool which is downloaded as an x20 dependency.
# To make changes to the R8CfSegments tool one can use the gradle target -
# remember to update the x20 dependency afterwards if you want the numbers
# tracked.
from __future__ import print_function
import argparse
import minify_tool
import os
import sys
import utils
def parse_arguments():
parser = argparse.ArgumentParser(
description='Run R8 or PG on'
' third_party/r8/r8.jar.'
' Report Golem-compatible CodeSize and RunTimeRaw values.')
parser.add_argument('--tool',
choices=['pg', 'r8'],
required=True,
help='Compiler tool to use.')
parser.add_argument(
'--name',
required=True,
help='Results will be printed using the specified benchmark name (e.g.'
' <NAME>-<segment>(CodeSize): <bytes>), the full size is reported'
' with <NAME>-Total(CodeSize)')
parser.add_argument('--print-memoryuse',
help='Prints the line \'<NAME>-Total(MemoryUse):'
' <mem>\' at the end where <mem> is the peak'
' peak resident set size (VmHWM) in bytes.',
default=False,
action='store_true')
parser.add_argument('--output',
help='Output directory to keep the generated files')
return parser.parse_args()
def Main():
args = parse_arguments()
utils.check_java_version()
output_dir = args.output
with utils.TempDir() as temp_dir:
if not output_dir:
output_dir = temp_dir
track_memory_file = None
if args.print_memoryuse:
track_memory_file = os.path.join(output_dir,
utils.MEMORY_USE_TMP_FILE)
if args.tool == 'pg':
utils.print_cfsegments(args.name, [utils.PINNED_PGR8_JAR])
else:
out_file = os.path.join(output_dir, 'out.jar')
return_code = minify_tool.minify_tool(
input_jar=utils.PINNED_R8_JAR,
output_jar=out_file,
debug=False,
build=False,
track_memory_file=track_memory_file,
benchmark_name=args.name + "-Total")
if return_code != 0:
sys.exit(return_code)
utils.print_cfsegments(args.name, [out_file])
if __name__ == '__main__':
sys.exit(Main())