Remove non-functional benchmarks.
Bug: 221813759
Change-Id: I412dd682d7ef6825906e323cb93e11e4deb2a370
diff --git a/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java b/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
deleted file mode 100644
index 20571ba..0000000
--- a/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright (c) 2017, 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.
-package com.android.tools.r8.benchmarks;
-
-import static com.android.tools.r8.benchmarks.BenchmarkUtils.printRuntimeNanoseconds;
-
-import com.android.tools.r8.ByteDataView;
-import com.android.tools.r8.ClassFileResourceProvider;
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.D8;
-import com.android.tools.r8.D8Command;
-import com.android.tools.r8.D8Command.Builder;
-import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumer.ForwardingConsumer;
-import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.ProgramConsumer;
-import com.android.tools.r8.ProgramResource;
-import com.android.tools.r8.ProgramResource.Kind;
-import com.android.tools.r8.ResourceException;
-import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.origin.PathOrigin;
-import com.android.tools.r8.utils.DescriptorUtils;
-import com.android.tools.r8.utils.ThreadUtils;
-import com.android.tools.r8.utils.ZipUtils;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.io.ByteStreams;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ExecutorService;
-
-public class FrameworkIncrementalDexingBenchmark {
- private static final int ITERATIONS = 100;
- private static final int API = 24;
- private static final Path JAR_DESUGARED =
- Paths.get("third_party", "framework", "framework_14082017_desugared.jar");
- private static final Path JAR_NOT_DESUGARED =
- Paths.get("third_party", "framework", "framework_14082017.jar");
- private static final Path LIB =
- Paths.get("third_party", "android_jar", "lib-v" + API, "android.jar");
-
- static class InMemoryClassPathProvider implements ClassFileResourceProvider {
- Origin origin;
- Map<String, byte[]> resources;
-
- InMemoryClassPathProvider(Path archive) throws IOException {
- origin = new PathOrigin(archive);
- ImmutableMap.Builder<String, byte[]> builder = ImmutableMap.builder();
- ZipUtils.iter(
- archive.toString(),
- (entry, stream) -> {
- String name = entry.getName();
- if (ZipUtils.isClassFile(name)) {
- String descriptor = DescriptorUtils.guessTypeDescriptor(name);
- builder.put(descriptor, ByteStreams.toByteArray(stream));
- }
- });
- resources = builder.build();
- }
-
- @Override
- public Set<String> getClassDescriptors() {
- return resources.keySet();
- }
-
- @Override
- public ProgramResource getProgramResource(String descriptor) {
- byte[] bytes = resources.get(descriptor);
- return bytes == null
- ? null
- : ProgramResource.fromBytes(
- new EntryOrigin(descriptor, origin),
- Kind.CF,
- bytes,
- Collections.singleton(descriptor));
- }
- }
-
- static class EntryOrigin extends Origin {
- final String descriptor;
-
- public EntryOrigin(String descriptor, Origin parent) {
- super(parent);
- this.descriptor = descriptor;
- }
-
- @Override
- public String part() {
- return descriptor;
- }
- }
-
- private static String title(String title, boolean desugar) {
- return "FrameworkIncremental" + (desugar ? title : "NoDesugar" + title);
- }
-
- private static void compileAll(
- Path input,
- InMemoryClassPathProvider provider,
- boolean desugar,
- Map<String, ProgramResource> outputs,
- ExecutorService executor)
- throws IOException, CompilationFailedException {
-
- ProgramConsumer consumer =
- new DexFilePerClassFileConsumer.ForwardingConsumer(null) {
- @Override
- public synchronized void accept(
- String primaryClassDescriptor,
- ByteDataView data,
- Set<String> descriptors,
- DiagnosticsHandler handler) {
- ProgramResource resource = ProgramResource.fromBytes(
- Origin.unknown(), Kind.DEX, data.copyByteData(), descriptors);
- for (String descriptor : descriptors) {
- assert !outputs.containsKey(descriptor);
- if (provider.resources.containsKey(descriptor)) {
- outputs.put(descriptor, resource);
- }
- }
- }
- };
-
- long start = System.nanoTime();
- D8.run(
- D8Command.builder()
- .setMinApiLevel(API)
- .setIntermediate(true)
- .setMode(CompilationMode.DEBUG)
- .addProgramFiles(input)
- .addLibraryFiles(LIB)
- .setDisableDesugaring(!desugar)
- .setProgramConsumer(consumer)
- .build(),
- executor);
- printRuntimeNanoseconds(title("DexAll", desugar), System.nanoTime() - start);
- }
-
- private static void compileGroupsOf(
- int count,
- List<String> descriptors,
- InMemoryClassPathProvider provider,
- boolean desugar,
- Map<String, ProgramResource> outputs,
- ExecutorService executor)
- throws IOException, CompilationFailedException {
- ProgramConsumer consumer =
- new ForwardingConsumer(null) {
- @Override
- public synchronized void accept(
- String primaryClassDescriptor,
- ByteDataView data,
- Set<String> descriptors,
- DiagnosticsHandler handler) {
- ProgramResource resource = ProgramResource.fromBytes(
- Origin.unknown(), Kind.DEX, data.copyByteData(), descriptors);
- for (String descriptor : descriptors) {
- if (provider.resources.containsKey(descriptor)) {
- outputs.put(descriptor, resource);
- }
- }
- }
- };
-
- descriptors.sort(String::compareTo);
- int increment = descriptors.size() / ITERATIONS;
- long start = System.nanoTime();
- for (int iteration = 0; iteration < ITERATIONS; iteration++) {
- int index = iteration * increment;
- Builder builder =
- D8Command.builder()
- .setMinApiLevel(API)
- .setIntermediate(true)
- .setMode(CompilationMode.DEBUG)
- .addClasspathResourceProvider(provider)
- .addLibraryFiles(LIB)
- .setProgramConsumer(consumer)
- .setDisableDesugaring(!desugar);
- for (int j = 0; j < count; j++) {
- builder.addClassProgramData(provider.resources.get(descriptors.get(index + j)),
- Origin.unknown());
- }
- D8.run(builder.build(), executor);
- }
- printRuntimeNanoseconds(title("DexGroupsOf" + count, desugar), System.nanoTime() - start);
- }
-
- private static void merge(
- boolean desugar, Map<String, ProgramResource> outputs, ExecutorService executor)
- throws IOException, CompilationFailedException, ResourceException {
- Builder builder =
- D8Command.builder()
- .setMinApiLevel(API)
- .setIntermediate(false)
- .setMode(CompilationMode.DEBUG)
- .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
- .setDisableDesugaring(true);
- for (ProgramResource input : outputs.values()) {
- try (InputStream inputStream = input.getByteStream()) {
- builder.addDexProgramData(ByteStreams.toByteArray(inputStream), input.getOrigin());
- }
- }
- long start = System.nanoTime();
- D8.run(
- builder // never need to desugar when merging dex.
- .build(),
- executor);
- printRuntimeNanoseconds(title("DexMerge", desugar), System.nanoTime() - start);
- }
-
- public static void main(String[] args)
- throws IOException, CompilationFailedException, ResourceException {
- boolean desugar = Arrays.asList(args).contains("--desugar");
- Path input = desugar ? JAR_NOT_DESUGARED : JAR_DESUGARED;
- InMemoryClassPathProvider provider = new InMemoryClassPathProvider(input);
- List<String> descriptors = new ArrayList<>(provider.getClassDescriptors());
- Map<String, ProgramResource> outputs = new HashMap<>(provider.getClassDescriptors().size());
- int threads = Integer.min(Runtime.getRuntime().availableProcessors(), 16) / 2;
- ExecutorService executor = ThreadUtils.getExecutorService(threads);
- try {
- compileAll(input, provider, desugar, outputs, executor);
- compileGroupsOf(1, descriptors, provider, desugar, outputs, executor);
- compileGroupsOf(10, descriptors, provider, desugar, outputs, executor);
- compileGroupsOf(100, descriptors, provider, desugar, outputs, executor);
- merge(desugar, outputs, executor);
- // TODO: We should run dex2oat to verify the compilation.
- } finally {
- executor.shutdown();
- }
- }
-}
diff --git a/src/main/java/com/android/tools/r8/benchmarks/IncrementalDexingBenchmark.java b/src/main/java/com/android/tools/r8/benchmarks/IncrementalDexingBenchmark.java
deleted file mode 100644
index 477fd63..0000000
--- a/src/main/java/com/android/tools/r8/benchmarks/IncrementalDexingBenchmark.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2017, 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.
-package com.android.tools.r8.benchmarks;
-
-import com.android.tools.r8.ByteDataView;
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.D8;
-import com.android.tools.r8.D8Command;
-import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.utils.ThreadUtils;
-import java.io.IOException;
-import java.nio.file.Paths;
-import java.util.Set;
-import java.util.concurrent.ExecutorService;
-
-public class IncrementalDexingBenchmark {
- private static final int ITERATIONS = 1000;
-
- public static void compile(ExecutorService executor)
- throws IOException, CompilationFailedException {
- D8.run(
- D8Command.builder()
- .addProgramFiles(Paths.get("build/test/examples/arithmetic.jar"))
- .setMode(CompilationMode.DEBUG)
- .setDisableDesugaring(true)
- .setProgramConsumer(
- new DexIndexedConsumer.ForwardingConsumer(null) {
- @Override
- public void accept(
- int fileIndex,
- ByteDataView data,
- Set<String> descriptors,
- DiagnosticsHandler handler) {
- if (fileIndex != 0) {
- throw new RuntimeException("WAT");
- }
- }
- })
- .build(),
- executor);
- }
-
- public static void main(String[] args) throws IOException, CompilationFailedException {
- int threads = Integer.min(Runtime.getRuntime().availableProcessors(), 16) / 2;
- ExecutorService executor = ThreadUtils.getExecutorService(threads);
- try {
- long start = System.nanoTime();
- for (int i = 0; i < ITERATIONS; i++) {
- compile(executor);
- }
- double elapsedMs = (System.nanoTime() - start) / 1000000.0;
- BenchmarkUtils.printRuntimeMilliseconds("IncrementalDexing", elapsedMs);
- } finally {
- executor.shutdown();
- }
- }
-}
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkSuite.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkSuite.java
index 1068f72..cecba1d 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkSuite.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkSuite.java
@@ -6,11 +6,7 @@
/** Enumeration of the benchmark suites on Golem. */
public enum BenchmarkSuite {
R8_BENCHMARKS("R8Benchmarks", "suite"),
- D8_BENCHMARKS("D8KeyBenchmarks", "d8KeySuite"),
- D8_INCREMENTAL_BENCHMARKS("D8IncrementalBenchmarks", "incrementalSuite"),
- OPENSOURCE_BENCHMARKS("OpenSourceAppDumps", "dumpsSuite"),
- MEMORY_BENCHMARKS("R8MemoryBenchmarks", "r8MemorySuite"),
- RETRACE_BENCHMARKS("R8RetraceBenchmarks", "r8RetraceSuite");
+ OPENSOURCE_BENCHMARKS("OpenSourceAppDumps", "dumpsSuite");
private final String golemName;
private final String dartName;
diff --git a/tools/golem_build.py b/tools/golem_build.py
index e9de5eb..4f668d6 100755
--- a/tools/golem_build.py
+++ b/tools/golem_build.py
@@ -8,26 +8,16 @@
import sys
import gradle
-import retrace_benchmark
import run_benchmark
import run_on_app_dump
GRADLE_ARGS = ['--no-daemon', '-Pno_internal']
-LEGACY_BUILD_TARGETS = [
- 'R8',
- 'D8',
- 'buildExampleJars',
- 'downloadAndroidCts',
- 'downloadDx']
-
def lower(items):
return [ item.lower() for item in items ]
def Main():
targets = set()
- targets.update(lower(LEGACY_BUILD_TARGETS))
- targets.update(lower(retrace_benchmark.GOLEM_BUILD_TARGETS))
targets.update(lower(run_benchmark.GOLEM_BUILD_TARGETS))
targets.update(lower(run_on_app_dump.GOLEM_BUILD_TARGETS))
cmd = GRADLE_ARGS + [target for target in targets]
diff --git a/tools/retrace_benchmark.py b/tools/retrace_benchmark.py
deleted file mode 100755
index 8c9121a..0000000
--- a/tools/retrace_benchmark.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env python3
-# 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 os
-import subprocess
-import sys
-import time
-
-import golem
-import jdk
-import proguard
-import utils
-
-GOLEM_BUILD_TARGETS = ['R8Lib']
-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)
- parser.add_argument('--download-benchmarks',
- help='Download retrace benchmarks',
- default=False,
- action='store_true')
- options = parser.parse_args(argv)
- return options
-
-def download_benchmarks():
- utils.DownloadFromGoogleCloudStorage(
- os.path.join(utils.THIRD_PARTY, 'retrace_benchmark') + '.tar.gz.sha1')
-
-def run_retrace(options, temp):
- if options.download_benchmarks:
- download_benchmarks()
- if options.retracer == 'r8':
- retracer_args = [
- '-cp', utils.R8LIB_JAR, 'com.android.tools.r8.retrace.Retrace']
- elif options.retracer == 'proguard':
- retracer_args = ['-jar', proguard.getRetraceJar()]
- 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)
- 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)
diff --git a/tools/run_bootstrap_benchmark.py b/tools/run_bootstrap_benchmark.py
deleted file mode 100755
index 0b35975..0000000
--- a/tools/run_bootstrap_benchmark.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2018, 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 os
-import sys
-
-import golem
-import minify_tool
-import toolhelper
-import utils
-
-MEMORY_XMX_LIMIT_BENCHMARK = 270
-
-def parse_arguments(argv):
- parser = argparse.ArgumentParser(
- description = 'Run r8 bootstrap benchmarks.')
- parser.add_argument('--golem',
- help = 'Link in third party dependencies.',
- default = False,
- action = 'store_true')
- parser.add_argument('--limit-memory-runtime-test',
- help = 'Run in a specific memory limit.',
- default = False,
- action = 'store_true')
- return parser.parse_args(argv)
-
-
-def dex(input, output):
- return_code = toolhelper.run(
- 'd8', [
- input,
- '--output', output,
- '--lib', utils.RT_JAR,
- '--min-api', '10000',
- '--no-desugaring',
- ],
- debug=False,
- build=False)
- if return_code != 0:
- sys.exit(return_code)
-
-if __name__ == '__main__':
- options = parse_arguments(sys.argv[1:])
- if options.golem:
- golem.link_third_party()
- with utils.TempDir() as temp:
- memory_file = os.path.join(temp, 'memory.dump')
- r8_output = os.path.join(temp, 'r8.zip')
- d8_r8_output = os.path.join(temp, 'd8r8.zip')
- d8_pg_output = os.path.join(temp, 'd8pg.zip')
-
- run_memory_test = options.limit_memory_runtime_test
-
- java_args = (['-Xmx%sM' % MEMORY_XMX_LIMIT_BENCHMARK]
- if run_memory_test else [])
-
- benchmark_name = "MemoryR8Pinned" if run_memory_test else "BootstrapR8"
-
- return_code = minify_tool.minify_tool(
- input_jar=utils.PINNED_R8_JAR,
- output_jar=r8_output,
- debug=False,
- build=False,
- track_memory_file=memory_file,
- benchmark_name=benchmark_name,
- java_args=java_args)
-
- if return_code != 0:
- sys.exit(return_code)
-
- if run_memory_test:
- # We are not tracking code-size, so return early.
- sys.exit(0)
-
- dex(r8_output, d8_r8_output)
- print "BootstrapR8(CodeSize):", utils.uncompressed_size(r8_output)
- print "BootstrapR8Dex(CodeSize):", utils.uncompressed_size(d8_r8_output)
-
- dex(utils.PINNED_PGR8_JAR, d8_pg_output)
- print "BootstrapR8PG(CodeSize):", utils.uncompressed_size(
- utils.PINNED_PGR8_JAR)
- print "BootstrapR8PGDex(CodeSize):", utils.uncompressed_size(d8_pg_output)
-
- r8_notreeshaking_output = os.path.join(temp, 'r8-notreeshaking.zip')
- return_code = minify_tool.minify_tool(
- input_jar=utils.PINNED_R8_JAR,
- output_jar=r8_notreeshaking_output,
- debug=False,
- build=False,
- benchmark_name="BootstrapR8NoTreeShaking",
- additional_args=["--no-tree-shaking"])
- if return_code != 0:
- sys.exit(return_code)
-
- sys.exit(0)
diff --git a/tools/test_framework.py b/tools/test_framework.py
deleted file mode 100755
index dccb63a..0000000
--- a/tools/test_framework.py
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2017, 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 D8 or DX on 'third_party/framework/framework_<version>.jar'.
-# Report Golem-compatible CodeSize and RunTimeRaw values:
-#
-# <NAME>-Total(CodeSize): <size>
-# <NAME>-Total(RunTimeRaw>: <time> ms
-#
-# and also detailed segment sizes for each dex segment:
-#
-# <NAME>-Code(CodeSize): <size>
-# <NAME>-AnnotationSets(CodeSize): <size>
-# ...
-#
-# Uses the DexSegment Java tool (Gradle target).
-
-from __future__ import print_function
-from glob import glob
-import argparse
-import golem
-import jdk
-import os
-import re
-import subprocess
-import sys
-import time
-
-import utils
-
-DX_JAR = os.path.join(utils.REPO_ROOT, 'tools', 'linux', 'dx', 'framework',
- 'dx.jar')
-FRAMEWORK_JAR = os.path.join('third_party', 'framework',
- 'framework_14082017_desugared.jar')
-MIN_SDK_VERSION = '24'
-
-def parse_arguments():
- parser = argparse.ArgumentParser(
- description = 'Run D8 or DX'
- ' third_party/framework/framework*.jar.'
- ' Report Golem-compatible CodeSize and RunTimeRaw values.')
- parser.add_argument('--tool',
- choices = ['dx', 'd8', 'd8-release'],
- required = True,
- help = 'Compiler tool to use.')
- parser.add_argument('--golem',
- help = 'Running on golem, link in third_party resources.',
- default = False,
- action = 'store_true')
- 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()
- if args.golem:
- golem.link_third_party()
- utils.check_java_version()
- output_dir = args.output
- with utils.TempDir() as temp_dir:
-
- if not output_dir:
- output_dir = temp_dir
-
- xmx = None
- if args.tool == 'dx':
- tool_file = DX_JAR
- tool_args = ['--dex', '--output=' + output_dir, '--multi-dex',
- '--min-sdk-version=' + MIN_SDK_VERSION]
- xmx = '-Xmx1600m'
- else:
- tool_file = utils.D8_JAR
- tool_args = ['--output', output_dir, '--min-api', MIN_SDK_VERSION]
- if args.tool == 'd8-release':
- tool_args.append('--release')
- xmx = '-Xmx600m'
-
- cmd = []
-
- track_memory_file = None
- if args.print_memoryuse:
- track_memory_file = os.path.join(output_dir, utils.MEMORY_USE_TMP_FILE)
- cmd.extend(['tools/track_memory.sh', track_memory_file])
-
- if tool_file.endswith('.jar'):
- assert xmx is not None
- cmd.extend([jdk.GetJavaExecutable(), xmx, '-jar'])
-
- cmd.extend([tool_file] + tool_args + [FRAMEWORK_JAR])
-
- utils.PrintCmd(cmd)
-
- t0 = time.time()
- subprocess.check_call(cmd)
- dt = time.time() - t0
-
- if args.print_memoryuse:
- print('{}-Total(MemoryUse): {}'
- .format(args.name, utils.grep_memoryuse(track_memory_file)))
-
- dex_files = [f for f in glob(os.path.join(output_dir, '*.dex'))]
- code_size = 0
- for dex_file in dex_files:
- code_size += os.path.getsize(dex_file)
-
- print('{}-Total(RunTimeRaw): {} ms'
- .format(args.name, 1000.0 * dt))
-
- print('{}-Total(CodeSize): {}'
- .format(args.name, code_size))
-
- utils.print_dexsegments(args.name, dex_files)
-
-if __name__ == '__main__':
- sys.exit(Main())
diff --git a/tools/test_helloexample.py b/tools/test_helloexample.py
deleted file mode 100755
index 509351e..0000000
--- a/tools/test_helloexample.py
+++ /dev/null
@@ -1,254 +0,0 @@
-#!/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 on a simple Hello World program
-# Report Golem-compatible RunTimeRaw values:
-#
-# <NAME>-Total(RunTimeRaw): <time> ms
-#
-# where <NAME> is Hello{,Dex}{,Large}{,NoOpt}
-
-import argparse
-import os
-import subprocess
-import sys
-import time
-import zipfile
-
-import golem
-import jdk
-import proguard
-import utils
-
-HELLO_JAR = os.path.join(utils.BUILD, 'test', 'examples', 'hello.jar')
-
-EXTRA_INPUTS = [
- os.path.join(utils.THIRD_PARTY, 'sample_libraries', lib) for lib in [
- 'animal-sniffer-annotations-1.17.jar',
- 'annotations-13.0.jar',
- 'checker-compat-qual-2.5.2.jar',
- 'collections-28.0.0.jar',
- 'common-1.1.1.jar',
- 'commons-collections4-4.3.jar',
- 'commons-compress-1.18.jar',
- 'commons-lang3-3.8.1.jar',
- 'commons-math3-3.6.1.jar',
- 'constraint-layout-solver-1.1.3.jar',
- 'converter-gson-2.5.0.jar',
- 'dagger-2.22.1.jar',
- 'error_prone_annotations-2.2.0.jar',
- 'failureaccess-1.0.1.jar',
- 'gson-2.8.2.jar',
- 'guava-27.1-android.jar',
- 'j2objc-annotations-1.1.jar',
- 'javax.inject-1.jar',
- 'jsr305-3.0.2.jar',
- 'kotlin-stdlib-1.3.21.jar',
- 'kotlin-stdlib-common-1.3.21.jar',
- 'kotlin-stdlib-jdk7-1.3.21.jar',
- 'listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar',
- 'okhttp-3.14.0.jar',
- 'okio-1.17.2.jar',
- 'play-services-ads-17.2.0-javadoc.jar',
- 'play-services-ads-base-17.2.0-javadoc.jar',
- 'play-services-ads-lite-17.2.0-javadoc.jar',
- 'play-services-analytics-16.0.8-javadoc.jar',
- 'play-services-analytics-impl-16.0.8-javadoc.jar',
- 'play-services-base-16.1.0-javadoc.jar',
- 'play-services-basement-16.2.0-javadoc.jar',
- 'play-services-cast-16.1.2-javadoc.jar',
- 'play-services-drive-16.1.0-javadoc.jar',
- 'play-services-fitness-16.0.1-javadoc.jar',
- 'play-services-games-17.0.0-javadoc.jar',
- 'play-services-gass-17.2.0-javadoc.jar',
- 'play-services-gcm-16.1.0-javadoc.jar',
- 'play-services-iid-16.0.1-javadoc.jar',
- 'play-services-measurement-16.4.0-javadoc.jar',
- 'play-services-measurement-api-16.4.0-javadoc.jar',
- 'play-services-measurement-base-16.4.0-javadoc.jar',
- 'play-services-measurement-impl-16.4.0-javadoc.jar',
- 'play-services-measurement-sdk-16.4.0-javadoc.jar',
- 'play-services-measurement-sdk-api-16.4.0-javadoc.jar',
- 'play-services-tagmanager-v4-impl-16.0.8-javadoc.jar',
- 'play-services-vision-17.0.2-javadoc.jar',
- 'play-services-vision-common-17.0.2-javadoc.jar',
- 'protobuf-lite-3.0.1.jar',
- 'reactive-streams-1.0.2.jar',
- 'retrofit-2.5.0.jar',
- 'rxjava-2.2.8.jar',
- 'support-annotations-28.0.0.jar',
- ]
-]
-
-EXTRA_KEEP_RULES = ['-dontwarn java.lang.ClassValue']
-
-def parse_arguments():
- parser = argparse.ArgumentParser(
- description = 'Compile a hello world example program')
- parser.add_argument('--tool',
- choices = ['d8', 'r8'] + proguard.getVersions(),
- required = True,
- help = 'Compiler tool to use.')
- parser.add_argument('--output-mode',
- choices = ['dex', 'cf'],
- required = True,
- help = 'Output mode to compile to.')
- parser.add_argument('--golem',
- help = 'Running on golem, link in third_party resources.',
- default = False,
- action = 'store_true')
- parser.add_argument('--large',
- help = 'Add many additional program inputs.',
- default = False,
- action = 'store_true')
- parser.add_argument('--noopt',
- help = 'Disable most optimizations/processing.',
- default = False,
- action = 'store_true')
- 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 GetConfRules(extra, noopt):
- rules = ['-keep class hello.Hello { void main(java.lang.String[]); }']
- if len(extra) > 0:
- rules.extend(EXTRA_KEEP_RULES)
- if noopt:
- rules.extend([
- '-dontoptimize',
- '-dontshrink',
- '-dontobfuscate',
- '-keepattributes *',
- ])
- return rules
-
-def GetCompilerPrefix(tool, mode, output, input, lib, extra, noopt):
- return [
- jdk.GetJavaExecutable(),
- '-jar', utils.R8_JAR if tool == 'r8' else utils.D8_JAR,
- '--output', output,
- '--lib', lib,
- '--debug' if noopt else '--release',
- input,
- ] + ([] if mode == 'cf' else ['--min-api', '21']) + extra
-
-def Compile(tool, output_mode, lib, extra, output_dir, noopt, temp_dir):
- output = os.path.join(output_dir, 'out.zip')
- if tool == 'd8':
- if output_mode != 'dex':
- raise ValueError('Invalid output mode for D8')
- classpath = []
- for cp_entry in extra:
- classpath.extend(['--classpath', cp_entry])
- return [
- GetCompilerPrefix(
- tool, output_mode, output, HELLO_JAR, lib, classpath, noopt)
- ]
- # The compilation is either R8 or PG.
- # Write keep rules to a temporary file.
- rules = GetConfRules(extra, noopt)
- rules_file = os.path.join(temp_dir, 'rules.conf')
- open(rules_file, 'w').write('\n'.join(rules))
- if tool == 'r8':
- cmd = GetCompilerPrefix(
- tool, output_mode, output, HELLO_JAR, lib, extra, noopt)
- cmd.extend(['--pg-conf', rules_file])
- if output_mode == 'cf':
- cmd.append('--classfile')
- return [cmd]
- if proguard.isValidVersion(tool):
- # Build PG invokation with additional rules to silence warnings.
- pg_out = output if output_mode == 'cf' \
- else os.path.join(output_dir, 'pgout.zip')
- cmds = [proguard.getCmd([
- '-injars', ':'.join([HELLO_JAR] + extra),
- '-libraryjars', lib,
- '-outjars', pg_out,
- '-dontwarn **',
- '@' + rules_file
- ], version=tool)]
- if output_mode == 'dex':
- cmds.append(
- GetCompilerPrefix('d8', 'dex', output, pg_out, lib, [], noopt))
- return cmds
- raise ValueError('Unknown tool: ' + tool)
-
-def ProcessInput(input, tmp_dir):
- if not input.endswith('.aar'):
- return input
- out_dir = os.path.join(tmp_dir, input)
- os.makedirs(out_dir)
- zip = zipfile.ZipFile(input, 'r')
- zip.extractall(out_dir)
- zip.close()
- return os.path.join(out_dir, 'classes.jar')
-
-def Main():
- args = parse_arguments()
- if args.golem:
- golem.link_third_party()
- utils.check_java_version()
-
- with utils.TempDir() as temp_dir:
- cmd_prefix = []
- output_dir = args.output if args.output else temp_dir
- temp_dir = os.path.join(args.output, 'tmp') if args.output else temp_dir
-
- track_memory_file = None
- if args.print_memoryuse:
- track_memory_file = os.path.join(output_dir, utils.MEMORY_USE_TMP_FILE)
- cmd_prefix.extend(['tools/track_memory.sh', track_memory_file])
-
- name = 'CompileHelloExample'
-
- tool = args.tool
- output_mode = args.output_mode
- lib = None
- if output_mode == 'dex':
- name += 'Dex'
- lib = utils.get_android_jar(28)
- else:
- lib = utils.RT_JAR
-
- extra = []
- if args.large:
- name += 'Large'
- extra = EXTRA_INPUTS
-
- if args.noopt:
- name += 'NoOpt'
-
- cmds = Compile(
- tool,
- output_mode,
- lib,
- extra,
- output_dir,
- args.noopt,
- temp_dir,
- )
-
- t0 = time.time()
- for cmd in cmds:
- fullcmd = cmd_prefix + cmd
- utils.PrintCmd(fullcmd)
- subprocess.check_output(fullcmd)
- dt = time.time() - t0
-
- if args.print_memoryuse:
- print('{}(MemoryUse): {}'
- .format(name, utils.grep_memoryuse(track_memory_file)))
-
- print('{}(RunTimeRaw): {} ms'
- .format(name, 1000.0 * dt))
-
-if __name__ == '__main__':
- sys.exit(Main())