Fix usage of internal API from compile dump classes
Change-Id: Ib753d947ece51b346a6da116b9e2ff5e99c793b8
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java
index f7de084..3b5b940 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java
@@ -9,68 +9,18 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.profile.art.ArtProfileBuilderUtils.SyntheticToSyntheticContextGeneralization;
-import com.android.tools.r8.references.MethodReference;
-import com.android.tools.r8.references.Reference;
import com.android.tools.r8.startup.StartupProfileBuilder;
import com.android.tools.r8.startup.StartupProfileProvider;
import com.android.tools.r8.startup.diagnostic.MissingStartupProfileItemsDiagnostic;
import com.android.tools.r8.utils.ConsumerUtils;
-import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.MethodReferenceUtils;
import com.android.tools.r8.utils.UTF8TextInputStream;
-import java.io.BufferedReader;
import java.io.IOException;
import java.io.UncheckedIOException;
-import java.nio.file.Files;
import java.nio.file.Path;
public class StartupProfileProviderUtils {
- public static StartupProfileProvider createFromDumpFile(Path path) {
- return new StartupProfileProvider() {
-
- @Override
- public void getStartupProfile(StartupProfileBuilder startupProfileBuilder) {
- try {
- try (BufferedReader bufferedReader = Files.newBufferedReader(path)) {
- while (bufferedReader.ready()) {
- String rule = bufferedReader.readLine();
- if (rule.charAt(0) == 'S') {
- String classDescriptor = rule.substring(1);
- assert DescriptorUtils.isClassDescriptor(classDescriptor);
- startupProfileBuilder.addSyntheticStartupMethod(
- syntheticStartupMethodBuilder ->
- syntheticStartupMethodBuilder.setSyntheticContextReference(
- Reference.classFromDescriptor(classDescriptor)));
- } else {
- MethodReference methodReference = MethodReferenceUtils.parseSmaliString(rule);
- if (methodReference != null) {
- startupProfileBuilder.addStartupMethod(
- startupMethodBuilder ->
- startupMethodBuilder.setMethodReference(methodReference));
- } else {
- assert DescriptorUtils.isClassDescriptor(rule);
- startupProfileBuilder.addStartupClass(
- startupClassBuilder ->
- startupClassBuilder.setClassReference(
- Reference.classFromDescriptor(rule)));
- }
- }
- }
- }
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- @Override
- public Origin getOrigin() {
- return new PathOrigin(path);
- }
- };
- }
-
public static StartupProfileProvider createFromHumanReadableArtProfile(Path path) {
return new StartupProfileProvider() {
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
index 82f1ce4..90a6eb2 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.R8;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.R8Command.Builder;
-import com.android.tools.r8.experimental.startup.StartupProfileProviderUtils;
import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.file.Files;
@@ -19,6 +18,7 @@
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -210,10 +210,6 @@
.addClasspathFiles(classpath)
.addProguardConfigurationFiles(config)
.addMainDexRulesFiles(mainDexRulesFiles)
- .addStartupProfileProviders(
- startupProfileFiles.stream()
- .map(StartupProfileProviderUtils::createFromDumpFile)
- .collect(Collectors.toList()))
.setOutput(outputPath, outputMode)
.setMode(compilationMode);
getReflectiveBuilderMethod(
@@ -221,6 +217,13 @@
.accept(new Object[] {enableMissingLibraryApiModeling});
getReflectiveBuilderMethod(commandBuilder, "setAndroidPlatformBuild", boolean.class)
.accept(new Object[] {androidPlatformBuild});
+ getReflectiveBuilderMethod(commandBuilder, "addStartupProfileProviders", Collection.class)
+ .accept(
+ new Object[] {
+ startupProfileFiles.stream()
+ .map(CompileDumpUtils::createStartupProfileProviderFromDumpFile)
+ .collect(Collectors.toList())
+ });
if (desugaredLibJson != null) {
commandBuilder.addDesugaredLibraryConfiguration(readAllBytesJava7(desugaredLibJson));
}
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java
index f1007f6..32892d7 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java
@@ -8,7 +8,6 @@
import com.android.tools.r8.D8;
import com.android.tools.r8.D8Command;
import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.experimental.startup.StartupProfileProviderUtils;
import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.file.Files;
@@ -16,6 +15,7 @@
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -153,10 +153,6 @@
.addLibraryFiles(library)
.addClasspathFiles(classpath)
.addMainDexRulesFiles(mainDexRulesFiles)
- .addStartupProfileProviders(
- startupProfileFiles.stream()
- .map(StartupProfileProviderUtils::createFromDumpFile)
- .collect(Collectors.toList()))
.setOutput(outputPath, outputMode)
.setMode(compilationMode);
getReflectiveBuilderMethod(
@@ -164,6 +160,13 @@
.accept(new Object[] {enableMissingLibraryApiModeling});
getReflectiveBuilderMethod(commandBuilder, "setAndroidPlatformBuild", boolean.class)
.accept(new Object[] {androidPlatformBuild});
+ getReflectiveBuilderMethod(commandBuilder, "addStartupProfileProviders", Collection.class)
+ .accept(
+ new Object[] {
+ startupProfileFiles.stream()
+ .map(CompileDumpUtils::createStartupProfileProviderFromDumpFile)
+ .collect(Collectors.toList())
+ });
if (desugaredLibJson != null) {
commandBuilder.addDesugaredLibraryConfiguration(readAllBytesJava7(desugaredLibJson));
}
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java b/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
new file mode 100644
index 0000000..7114ef8
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
@@ -0,0 +1,66 @@
+// Copyright (c) 2022, 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.utils;
+
+import com.android.tools.r8.Keep;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
+import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.startup.StartupProfileBuilder;
+import com.android.tools.r8.startup.StartupProfileProvider;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+@Keep
+class CompileDumpUtils {
+
+ static StartupProfileProvider createStartupProfileProviderFromDumpFile(Path path) {
+ return new StartupProfileProvider() {
+
+ @Override
+ public void getStartupProfile(StartupProfileBuilder startupProfileBuilder) {
+ try {
+ try (BufferedReader bufferedReader = Files.newBufferedReader(path)) {
+ while (bufferedReader.ready()) {
+ String rule = bufferedReader.readLine();
+ if (rule.charAt(0) == 'S') {
+ String classDescriptor = rule.substring(1);
+ assert DescriptorUtils.isClassDescriptor(classDescriptor);
+ startupProfileBuilder.addSyntheticStartupMethod(
+ syntheticStartupMethodBuilder ->
+ syntheticStartupMethodBuilder.setSyntheticContextReference(
+ Reference.classFromDescriptor(classDescriptor)));
+ } else {
+ MethodReference methodReference = MethodReferenceUtils.parseSmaliString(rule);
+ if (methodReference != null) {
+ startupProfileBuilder.addStartupMethod(
+ startupMethodBuilder ->
+ startupMethodBuilder.setMethodReference(methodReference));
+ } else {
+ assert DescriptorUtils.isClassDescriptor(rule);
+ startupProfileBuilder.addStartupClass(
+ startupClassBuilder ->
+ startupClassBuilder.setClassReference(
+ Reference.classFromDescriptor(rule)));
+ }
+ }
+ }
+ }
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ @Override
+ public Origin getOrigin() {
+ return new PathOrigin(path);
+ }
+ };
+ }
+}