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') |
| 33 | D8_JAR = os.path.join(utils.REPO_ROOT, 'build', 'libs', 'd8.jar') |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 34 | GOYT_EXE = os.path.join('third_party', 'goyt', |
| 35 | 'goyt_160525751') |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 36 | FRAMEWORK_JAR = os.path.join('third_party', 'framework', |
| 37 | 'framework_160115954.jar') |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 38 | MIN_SDK_VERSION = '24' |
| 39 | |
| 40 | def parse_arguments(): |
| 41 | parser = argparse.ArgumentParser( |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 42 | description = 'Run D8, DX or Goyt on' |
| 43 | ' third_party/framework/framework*.jar.' |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 44 | ' Report Golem-compatible CodeSize and RunTimeRaw values.') |
| 45 | parser.add_argument('--tool', |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 46 | choices = ['dx', 'd8', 'd8-release', 'goyt'], |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 47 | required = True, |
| 48 | help = 'Compiler tool to use.') |
| 49 | parser.add_argument('--name', |
| 50 | required = True, |
| 51 | help = 'Results will be printed using the specified benchmark name (e.g.' |
Tamas Kenez | 8796a77 | 2017-06-28 12:44:44 +0200 | [diff] [blame] | 52 | ' <NAME>-<segment>(CodeSize): <bytes>)') |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 53 | parser.add_argument('--print-memoryuse', |
| 54 | help = 'Prints the line \'<NAME>(MemoryUse):' + |
| 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') |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 59 | return parser.parse_args() |
| 60 | |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 61 | def Main(): |
Tamas Kenez | 2cf47cf | 2017-07-25 10:22:52 +0200 | [diff] [blame] | 62 | utils.check_java_version() |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 63 | args = parse_arguments() |
| 64 | |
| 65 | with utils.TempDir() as temp_dir: |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 66 | |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 67 | if args.tool in ['dx', 'goyt']: |
| 68 | tool_args = ['--dex', '--output=' + temp_dir, '--multi-dex', |
| 69 | '--min-sdk-version=' + MIN_SDK_VERSION] |
| 70 | |
| 71 | if args.tool == 'goyt': |
| 72 | tool_file = GOYT_EXE |
Tamas Kenez | 39b68ea | 2017-07-03 14:32:37 +0200 | [diff] [blame] | 73 | tool_args = ['--num-threads=4'] + tool_args |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 74 | elif args.tool == 'dx': |
| 75 | tool_file = DX_JAR |
| 76 | else: |
| 77 | tool_file = D8_JAR |
Ian Zerny | 877c186 | 2017-07-06 11:12:26 +0200 | [diff] [blame] | 78 | tool_args = ['--output', temp_dir, '--min-api', MIN_SDK_VERSION] |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 79 | if args.tool == 'd8-release': |
| 80 | tool_args.append('--release') |
| 81 | |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 82 | |
| 83 | cmd = [] |
| 84 | |
| 85 | track_memory_file = None |
| 86 | if args.print_memoryuse: |
| 87 | track_memory_file = os.path.join(temp_dir, utils.MEMORY_USE_TMP_FILE) |
| 88 | cmd.extend(['tools/track_memory.sh', track_memory_file]) |
| 89 | |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 90 | if tool_file.endswith('.jar'): |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 91 | cmd.extend(['java', '-jar']) |
Tamas Kenez | 391fca8 | 2017-06-29 18:16:01 +0200 | [diff] [blame] | 92 | |
| 93 | cmd.extend([tool_file] + tool_args + [FRAMEWORK_JAR]) |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 94 | |
| 95 | utils.PrintCmd(cmd) |
| 96 | |
| 97 | t0 = time.time() |
| 98 | subprocess.check_call(cmd) |
| 99 | dt = time.time() - t0 |
| 100 | |
Tamas Kenez | fc34cd8 | 2017-07-13 12:43:57 +0200 | [diff] [blame] | 101 | if args.print_memoryuse: |
| 102 | print('{}(MemoryUse): {}' |
| 103 | .format(args.name, utils.grep_memoryuse(track_memory_file))) |
| 104 | |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 105 | dex_files = [f for f in glob(os.path.join(temp_dir, '*.dex'))] |
| 106 | code_size = 0 |
| 107 | for dex_file in dex_files: |
| 108 | code_size += os.path.getsize(dex_file) |
| 109 | |
Tamas Kenez | 8796a77 | 2017-06-28 12:44:44 +0200 | [diff] [blame] | 110 | print('{}-Total(RunTimeRaw): {} ms' |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 111 | .format(args.name, 1000.0 * dt)) |
| 112 | |
Tamas Kenez | 8796a77 | 2017-06-28 12:44:44 +0200 | [diff] [blame] | 113 | print('{}-Total(CodeSize): {}' |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 114 | .format(args.name, code_size)) |
| 115 | |
Tamas Kenez | 02bff03 | 2017-07-18 12:13:58 +0200 | [diff] [blame] | 116 | utils.print_dexsegments(args.name, dex_files) |
Tamas Kenez | 5cf51bb | 2017-06-27 15:40:46 +0200 | [diff] [blame] | 117 | |
| 118 | if __name__ == '__main__': |
| 119 | sys.exit(Main()) |