Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Copyright (c) 2017, 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 | |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 6 | # Run D8, DX or Goyt on 'third_party/framework/framework_<version>.jar'. |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 7 | # Report Golem-compatible CodeSize and RunTimeRaw values: |
| 8 | # |
Tamas Kenez | 8796a77 | 2017-06-28 12:44:44 +0200 | [diff] [blame] | 9 | # <NAME>-Total(CodeSize): <size> |
| 10 | # <NAME>-Total(RunTimeRaw>: <time> ms |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 11 | # |
| 12 | # and also detailed segment sizes for each dex segment: |
| 13 | # |
| 14 | # <NAME>-Code(CodeSize): <size> |
| 15 | # <NAME>-AnnotationSets(CodeSize): <size> |
| 16 | # ... |
| 17 | # |
| 18 | # Uses the DexSegment Java tool (Gradle target). |
| 19 | |
| 20 | from __future__ import print_function |
| 21 | from glob import glob |
| 22 | import argparse |
| 23 | import os |
| 24 | import re |
| 25 | import subprocess |
| 26 | import sys |
| 27 | import time |
| 28 | |
| 29 | import utils |
| 30 | |
| 31 | DX_JAR = os.path.join(utils.REPO_ROOT, 'tools', 'linux', 'dx', 'framework', |
| 32 | 'dx.jar') |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 33 | GOYT_EXE = os.path.join('third_party', 'goyt', |
Tamas Kenez | faae441 | 2017-09-27 17:10:42 +0200 | [diff] [blame] | 34 | 'goyt_170197324') |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 35 | FRAMEWORK_JAR = os.path.join('third_party', 'framework', |
Rico Wind | 3a30c8f | 2017-08-16 09:13:35 +0200 | [diff] [blame] | 36 | 'framework_14082017_desugared.jar') |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 37 | MIN_SDK_VERSION = '24' |
| 38 | |
| 39 | def parse_arguments(): |
| 40 | parser = argparse.ArgumentParser( |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 41 | description = 'Run D8, DX or Goyt on' |
| 42 | ' third_party/framework/framework*.jar.' |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 43 | ' Report Golem-compatible CodeSize and RunTimeRaw values.') |
| 44 | parser.add_argument('--tool', |
Rico Wind | 7e0b4c7 | 2017-08-16 09:30:56 +0200 | [diff] [blame] | 45 | choices = ['dx', 'd8', 'd8-release', 'goyt', 'goyt-release'], |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 46 | required = True, |
| 47 | help = 'Compiler tool to use.') |
| 48 | parser.add_argument('--name', |
| 49 | required = True, |
| 50 | help = 'Results will be printed using the specified benchmark name (e.g.' |
Tamas Kenez | 13f68cf | 2017-08-10 13:19:41 +0200 | [diff] [blame] | 51 | ' <NAME>-<segment>(CodeSize): <bytes>), the full size is reported' |
| 52 | ' with <NAME>-Total(CodeSize)') |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 53 | parser.add_argument('--print-memoryuse', |
Tamas Kenez | 13f68cf | 2017-08-10 13:19:41 +0200 | [diff] [blame] | 54 | help = 'Prints the line \'<NAME>-Total(MemoryUse):' + |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 55 | ' <mem>\' at the end where <mem> is the peak' + |
| 56 | ' peak resident set size (VmHWM) in bytes.', |
| 57 | default = False, |
| 58 | action = 'store_true') |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 59 | parser.add_argument('--output', |
| 60 | help = 'Output directory to keep the generated files') |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 61 | return parser.parse_args() |
| 62 | |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 63 | def Main(): |
Tamas Kenez | 2cf47cf | 2017-07-25 10:22:52 +0200 | [diff] [blame] | 64 | utils.check_java_version() |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 65 | args = parse_arguments() |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 66 | output_dir = args.output |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 67 | |
| 68 | with utils.TempDir() as temp_dir: |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 69 | |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 70 | if not output_dir: |
| 71 | output_dir = temp_dir |
| 72 | |
Rico Wind | 7e0b4c7 | 2017-08-16 09:30:56 +0200 | [diff] [blame] | 73 | if args.tool in ['dx', 'goyt', 'goyt-release']: |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 74 | tool_args = ['--dex', '--output=' + output_dir, '--multi-dex', |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 75 | '--min-sdk-version=' + MIN_SDK_VERSION] |
| 76 | |
Tamas Kenez | ca3f282 | 2017-08-16 16:06:01 +0200 | [diff] [blame] | 77 | xmx = None |
Rico Wind | 7e0b4c7 | 2017-08-16 09:30:56 +0200 | [diff] [blame] | 78 | if args.tool.startswith('goyt'): |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 79 | tool_file = GOYT_EXE |
Rico Wind | ea18a7a | 2017-08-14 07:11:09 +0200 | [diff] [blame] | 80 | tool_args = ['--num-threads=8'] + tool_args |
Rico Wind | 7e0b4c7 | 2017-08-16 09:30:56 +0200 | [diff] [blame] | 81 | if args.tool == 'goyt-release': |
| 82 | tool_args.append('--no-locals') |
Tamas Kenez | d183499 | 2017-09-28 09:40:17 +0200 | [diff] [blame] | 83 | else: |
| 84 | tool_args.append('--no-optimize') |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 85 | elif args.tool == 'dx': |
| 86 | tool_file = DX_JAR |
Tamas Kenez | ca3f282 | 2017-08-16 16:06:01 +0200 | [diff] [blame] | 87 | xmx = '-Xmx1600m' |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 88 | else: |
Rico Wind | b4621c1 | 2017-08-28 12:48:53 +0200 | [diff] [blame] | 89 | tool_file = utils.D8_JAR |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 90 | tool_args = ['--output', output_dir, '--min-api', MIN_SDK_VERSION] |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 91 | if args.tool == 'd8-release': |
| 92 | tool_args.append('--release') |
Tamas Kenez | ca3f282 | 2017-08-16 16:06:01 +0200 | [diff] [blame] | 93 | xmx = '-Xmx600m' |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 94 | |
| 95 | cmd = [] |
| 96 | |
| 97 | track_memory_file = None |
| 98 | if args.print_memoryuse: |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 99 | track_memory_file = os.path.join(output_dir, utils.MEMORY_USE_TMP_FILE) |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 100 | cmd.extend(['tools/track_memory.sh', track_memory_file]) |
| 101 | |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 102 | if tool_file.endswith('.jar'): |
Tamas Kenez | ca3f282 | 2017-08-16 16:06:01 +0200 | [diff] [blame] | 103 | assert xmx is not None |
| 104 | cmd.extend(['java', xmx, '-jar']) |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 105 | |
| 106 | cmd.extend([tool_file] + tool_args + [FRAMEWORK_JAR]) |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 107 | |
| 108 | utils.PrintCmd(cmd) |
| 109 | |
| 110 | t0 = time.time() |
| 111 | subprocess.check_call(cmd) |
| 112 | dt = time.time() - t0 |
| 113 | |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 114 | if args.print_memoryuse: |
Tamas Kenez | 13f68cf | 2017-08-10 13:19:41 +0200 | [diff] [blame] | 115 | print('{}-Total(MemoryUse): {}' |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 116 | .format(args.name, utils.grep_memoryuse(track_memory_file))) |
| 117 | |
Søren Gjesse | ef3503b | 2017-08-25 09:20:40 +0200 | [diff] [blame] | 118 | dex_files = [f for f in glob(os.path.join(output_dir, '*.dex'))] |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 119 | code_size = 0 |
| 120 | for dex_file in dex_files: |
| 121 | code_size += os.path.getsize(dex_file) |
| 122 | |
Tamas Kenez | 8796a77 | 2017-06-28 12:44:44 +0200 | [diff] [blame] | 123 | print('{}-Total(RunTimeRaw): {} ms' |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 124 | .format(args.name, 1000.0 * dt)) |
| 125 | |
Tamas Kenez | 8796a77 | 2017-06-28 12:44:44 +0200 | [diff] [blame] | 126 | print('{}-Total(CodeSize): {}' |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 127 | .format(args.name, code_size)) |
| 128 | |
Tamas Kenez | 02bff03 | 2017-07-18 12:13:58 +0200 | [diff] [blame] | 129 | utils.print_dexsegments(args.name, dex_files) |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 130 | |
| 131 | if __name__ == '__main__': |
| 132 | sys.exit(Main()) |