Change startup profile in InternalOptions to a StringResource
Change-Id: I7b3de52609582e974ee59e71bc7a9d5b23eedee5
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 7498045..9818440 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.dump.DumpOptions;
import com.android.tools.r8.errors.DexFileOverflowDiagnostic;
import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
-import com.android.tools.r8.experimental.startup.StartupConfiguration;
import com.android.tools.r8.features.FeatureSplitConfiguration;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.inspector.Inspector;
@@ -975,11 +974,6 @@
internal.featureSplitConfiguration = featureSplitConfiguration;
- internal
- .getStartupOptions()
- .setStartupConfiguration(
- StartupConfiguration.createStartupConfiguration(getDexItemFactory(), getReporter()));
-
internal.syntheticProguardRulesConsumer = syntheticProguardRulesConsumer;
internal.outputInspections = InspectorImpl.wrapInspections(getOutputInspections());
diff --git a/src/main/java/com/android/tools/r8/dex/VirtualFile.java b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
index 785bfd2..e9330aa 100644
--- a/src/main/java/com/android/tools/r8/dex/VirtualFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
@@ -1396,7 +1396,7 @@
return;
}
- assert options.getStartupOptions().hasStartupConfiguration();
+ assert options.getStartupOptions().hasStartupProfile();
// In practice, all startup classes should fit in a single dex file, so optimistically try to
// commit the startup classes using a single transaction.
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupClass.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupClass.java
index 7ae4d30..b6c6311 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupClass.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupClass.java
@@ -56,6 +56,17 @@
return this;
}
+ @Override
+ public void serializeToString(
+ StringBuilder builder,
+ Function<C, String> classSerializer,
+ Function<M, String> methodSerializer) {
+ if (isSynthetic()) {
+ builder.append('S');
+ }
+ builder.append(classSerializer.apply(getReference()));
+ }
+
public static class Builder<C, M> extends StartupItem.Builder<C, M, Builder<C, M>> {
@Override
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupConfiguration.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupConfiguration.java
deleted file mode 100644
index 2f1a23d..0000000
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupConfiguration.java
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (c) 2021, 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.experimental.startup;
-
-import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.utils.ExceptionDiagnostic;
-import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.Reporter;
-import com.android.tools.r8.utils.StringDiagnostic;
-import com.google.common.collect.ImmutableList;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Consumer;
-
-public class StartupConfiguration {
-
- private final List<StartupItem<DexType, DexMethod, ?>> startupItems;
-
- public StartupConfiguration(List<StartupItem<DexType, DexMethod, ?>> startupItems) {
- this.startupItems = startupItems;
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- /**
- * Parses the supplied startup configuration, if any. The startup configuration is a list of class
- * and method descriptors.
- *
- * <p>Example:
- *
- * <pre>
- * Landroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
- * Landroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
- * Landroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
- * Landroidx/compose/runtime/CompositionImpl;->applyChanges()V
- * Landroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
- * Landroidx/compose/runtime/ComposerImpl;
- * </pre>
- */
- public static StartupConfiguration createStartupConfiguration(
- DexItemFactory dexItemFactory, Reporter reporter) {
- String propertyValue = System.getProperty("com.android.tools.r8.startup.config");
- return propertyValue != null
- ? createStartupConfigurationFromFile(dexItemFactory, reporter, Paths.get(propertyValue))
- : null;
- }
-
- public static StartupConfiguration createStartupConfigurationFromFile(
- DexItemFactory dexItemFactory, Reporter reporter, Path path) {
- reporter.warning("Use of startupconfig is experimental");
-
- List<String> startupDescriptors;
- try {
- startupDescriptors = FileUtils.readAllLines(path);
- } catch (IOException e) {
- throw reporter.fatalError(new ExceptionDiagnostic(e));
- }
-
- if (startupDescriptors.isEmpty()) {
- return null;
- }
-
- return createStartupConfigurationFromLines(dexItemFactory, reporter, startupDescriptors);
- }
-
- public static StartupConfiguration createStartupConfigurationFromLines(
- DexItemFactory dexItemFactory, Reporter reporter, List<String> startupDescriptors) {
- List<StartupItem<DexType, DexMethod, ?>> startupItems = new ArrayList<>();
- StartupConfigurationParser.createDexParser(dexItemFactory)
- .parseLines(
- startupDescriptors,
- startupItems::add,
- startupItems::add,
- error ->
- reporter.warning(
- new StringDiagnostic(
- "Invalid descriptor for startup class or method: " + error)));
- return new StartupConfiguration(startupItems);
- }
-
- public boolean hasStartupItems() {
- return !startupItems.isEmpty();
- }
-
- public List<StartupItem<DexType, DexMethod, ?>> getStartupItems() {
- return startupItems;
- }
-
- public static class Builder {
-
- private final ImmutableList.Builder<StartupItem<DexType, DexMethod, ?>> startupItemsBuilder =
- ImmutableList.builder();
-
- public Builder addStartupItem(StartupItem<DexType, DexMethod, ?> startupItem) {
- this.startupItemsBuilder.add(startupItem);
- return this;
- }
-
- public Builder addStartupClass(StartupClass<DexType, DexMethod> startupClass) {
- return addStartupItem(startupClass);
- }
-
- public Builder addStartupMethod(StartupMethod<DexType, DexMethod> startupMethod) {
- return addStartupItem(startupMethod);
- }
-
- public Builder apply(Consumer<Builder> consumer) {
- consumer.accept(this);
- return this;
- }
-
- public StartupConfiguration build() {
- return new StartupConfiguration(startupItemsBuilder.build());
- }
- }
-}
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupItem.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupItem.java
index 74e69e2..e2ea09b 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupItem.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupItem.java
@@ -64,6 +64,11 @@
return (flags & FLAG_SYNTHETIC) != 0;
}
+ public abstract void serializeToString(
+ StringBuilder builder,
+ Function<C, String> classSerializer,
+ Function<M, String> methodSerializer);
+
@Override
public boolean equals(Object obj) {
if (this == obj) {
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupMethod.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupMethod.java
index 871e179..00ddca9 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupMethod.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupMethod.java
@@ -43,6 +43,17 @@
return this;
}
+ @Override
+ public void serializeToString(
+ StringBuilder builder,
+ Function<C, String> classSerializer,
+ Function<M, String> methodSerializer) {
+ if (isSynthetic()) {
+ builder.append('S');
+ }
+ builder.append(methodSerializer.apply(getReference()));
+ }
+
public static class Builder<C, M> extends StartupItem.Builder<C, M, Builder<C, M>> {
@Override
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupOptions.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupOptions.java
index 05fd544..c7f4a5c 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupOptions.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupOptions.java
@@ -6,6 +6,10 @@
import static com.android.tools.r8.utils.SystemPropertyUtils.parseSystemPropertyForDevelopmentOrDefault;
+import com.android.tools.r8.StringResource;
+import com.android.tools.r8.utils.SystemPropertyUtils;
+import java.nio.file.Paths;
+
public class StartupOptions {
/**
@@ -44,7 +48,11 @@
private boolean enableStartupLayoutOptimizations =
parseSystemPropertyForDevelopmentOrDefault("com.android.tools.r8.startup.layout", true);
- private StartupConfiguration startupConfiguration;
+ private StringResource startupProfile =
+ SystemPropertyUtils.applySystemProperty(
+ "com.android.tools.r8.startup.profile",
+ propertyValue -> StringResource.fromFile(Paths.get(propertyValue)),
+ () -> null);
public boolean isMinimalStartupDexEnabled() {
return enableMinimalStartupDex;
@@ -83,16 +91,16 @@
return this;
}
- public boolean hasStartupConfiguration() {
- return startupConfiguration != null;
+ public boolean hasStartupProfile() {
+ return startupProfile != null;
}
- public StartupConfiguration getStartupConfiguration() {
- return startupConfiguration;
+ public StringResource getStartupProfile() {
+ return startupProfile;
}
- public StartupOptions setStartupConfiguration(StartupConfiguration startupConfiguration) {
- this.startupConfiguration = startupConfiguration;
+ public StartupOptions setStartupProfile(StringResource startupProfile) {
+ this.startupProfile = startupProfile;
return this;
}
}
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupOrder.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupOrder.java
index b1803eb..9f9bf65 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupOrder.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupOrder.java
@@ -19,15 +19,11 @@
StartupOrder() {}
public static StartupOrder createInitialStartupOrder(InternalOptions options) {
- if (!options.getStartupOptions().hasStartupConfiguration()) {
+ StartupProfile startupProfile = StartupProfile.parseStartupProfile(options);
+ if (startupProfile == null || startupProfile.getStartupItems().isEmpty()) {
return empty();
}
- StartupConfiguration startupConfiguration =
- options.getStartupOptions().getStartupConfiguration();
- if (!startupConfiguration.hasStartupItems()) {
- return empty();
- }
- return new NonEmptyStartupOrder(new LinkedHashSet<>(startupConfiguration.getStartupItems()));
+ return new NonEmptyStartupOrder(new LinkedHashSet<>(startupProfile.getStartupItems()));
}
public static StartupOrder empty() {
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupProfile.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupProfile.java
new file mode 100644
index 0000000..821b86c
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupProfile.java
@@ -0,0 +1,114 @@
+// Copyright (c) 2021, 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.experimental.startup;
+
+import com.android.tools.r8.ResourceException;
+import com.android.tools.r8.StringResource;
+import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.StringDiagnostic;
+import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+public class StartupProfile {
+
+ private final List<StartupItem<DexType, DexMethod, ?>> startupItems;
+
+ public StartupProfile(List<StartupItem<DexType, DexMethod, ?>> startupItems) {
+ this.startupItems = startupItems;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Parses the supplied startup configuration, if any. The startup configuration is a list of class
+ * and method descriptors.
+ *
+ * <p>Example:
+ *
+ * <pre>
+ * Landroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
+ * Landroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
+ * Landroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
+ * Landroidx/compose/runtime/CompositionImpl;->applyChanges()V
+ * Landroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
+ * Landroidx/compose/runtime/ComposerImpl;
+ * </pre>
+ */
+ public static StartupProfile parseStartupProfile(InternalOptions options) {
+ if (!options.getStartupOptions().hasStartupProfile()) {
+ return null;
+ }
+ try {
+ StringResource resource = options.getStartupOptions().getStartupProfile();
+ List<String> startupDescriptors = StringUtils.splitLines(resource.getString());
+ return createStartupConfigurationFromLines(options, startupDescriptors);
+ } catch (ResourceException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static StartupProfile createStartupConfigurationFromLines(
+ InternalOptions options, List<String> startupDescriptors) {
+ List<StartupItem<DexType, DexMethod, ?>> startupItems = new ArrayList<>();
+ StartupConfigurationParser.createDexParser(options.dexItemFactory())
+ .parseLines(
+ startupDescriptors,
+ startupItems::add,
+ startupItems::add,
+ error ->
+ options.reporter.warning(
+ new StringDiagnostic(
+ "Invalid descriptor for startup class or method: " + error)));
+ return new StartupProfile(startupItems);
+ }
+
+ public List<StartupItem<DexType, DexMethod, ?>> getStartupItems() {
+ return startupItems;
+ }
+
+ public String serializeToString() {
+ StringBuilder builder = new StringBuilder();
+ for (StartupItem<DexType, DexMethod, ?> startupItem : startupItems) {
+ startupItem.serializeToString(builder, DexType::toSmaliString, DexMethod::toSmaliString);
+ builder.append('\n');
+ }
+ return builder.toString();
+ }
+
+ public static class Builder {
+
+ private final ImmutableList.Builder<StartupItem<DexType, DexMethod, ?>> startupItemsBuilder =
+ ImmutableList.builder();
+
+ public Builder addStartupItem(StartupItem<DexType, DexMethod, ?> startupItem) {
+ this.startupItemsBuilder.add(startupItem);
+ return this;
+ }
+
+ public Builder addStartupClass(StartupClass<DexType, DexMethod> startupClass) {
+ return addStartupItem(startupClass);
+ }
+
+ public Builder addStartupMethod(StartupMethod<DexType, DexMethod> startupMethod) {
+ return addStartupItem(startupMethod);
+ }
+
+ public Builder apply(Consumer<Builder> consumer) {
+ consumer.accept(this);
+ return this;
+ }
+
+ public StartupProfile build() {
+ return new StartupProfile(startupItemsBuilder.build());
+ }
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/utils/SystemPropertyUtils.java b/src/main/java/com/android/tools/r8/utils/SystemPropertyUtils.java
index d8d4a38..a984560 100644
--- a/src/main/java/com/android/tools/r8/utils/SystemPropertyUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/SystemPropertyUtils.java
@@ -7,10 +7,21 @@
import static com.google.common.base.Predicates.alwaysTrue;
import com.android.tools.r8.Version;
+import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.function.Supplier;
public class SystemPropertyUtils {
+ public static <T> T applySystemProperty(
+ String propertyName, Function<String, T> propertyFoundFn, Supplier<T> propertyNotFoundFn) {
+ if (isSystemPropertySet(propertyName)) {
+ return propertyFoundFn.apply(System.getProperty(propertyName));
+ } else {
+ return propertyNotFoundFn.get();
+ }
+ }
+
public static String getSystemPropertyForDevelopment(String propertyName) {
return Version.isDevelopmentVersion() ? System.getProperty(propertyName) : null;
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingWithStartupClassesTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingWithStartupClassesTest.java
index 30b9700..dee7541 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingWithStartupClassesTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingWithStartupClassesTest.java
@@ -5,11 +5,13 @@
package com.android.tools.r8.classmerging.horizontal;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.StringResource;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.experimental.startup.StartupClass;
-import com.android.tools.r8.experimental.startup.StartupConfiguration;
+import com.android.tools.r8.experimental.startup.StartupProfile;
import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.BooleanUtils;
import com.google.common.collect.ImmutableList;
import java.util.Collections;
@@ -49,21 +51,22 @@
.addOptionsModification(
options -> {
DexItemFactory dexItemFactory = options.dexItemFactory();
- options
- .getStartupOptions()
- .setStartupConfiguration(
- StartupConfiguration.builder()
- .apply(
- builder ->
- getStartupClasses()
- .forEach(
- startupClass ->
- builder.addStartupClass(
- StartupClass.dexBuilder()
- .setClassReference(
- toDexType(startupClass, dexItemFactory))
- .build())))
- .build());
+ StartupProfile startupProfile =
+ StartupProfile.builder()
+ .apply(
+ builder ->
+ getStartupClasses()
+ .forEach(
+ startupClass ->
+ builder.addStartupClass(
+ StartupClass.dexBuilder()
+ .setClassReference(
+ toDexType(startupClass, dexItemFactory))
+ .build())))
+ .build();
+ StringResource startupProfileResource =
+ StringResource.fromString(startupProfile.serializeToString(), Origin.unknown());
+ options.getStartupOptions().setStartupProfile(startupProfileResource);
})
.addHorizontallyMergedClassesInspector(
inspector ->
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1719Test.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1719Test.java
index c460799..18921a8 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1719Test.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1719Test.java
@@ -27,7 +27,6 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ThrowableConsumer;
-import com.android.tools.r8.experimental.startup.StartupConfiguration;
import com.android.tools.r8.tracereferences.TraceReferences;
import com.android.tools.r8.tracereferences.TraceReferencesCommand;
import com.android.tools.r8.tracereferences.TraceReferencesKeepRules;
@@ -58,7 +57,7 @@
// By setting this to an actual startup list, YouTube will be build with layout optimizations
// enabled.
- private final Path startupList = null;
+ private final StringResource startupProfile = null;
private final boolean enableMinimalStartupDex = true;
private final boolean enableStartupBoundaryOptimizations = false;
@@ -132,8 +131,8 @@
* Running this test will dump an R8 build of YouTube in the {@link #dumpDirectory}, where the
* desugared library keep rules are generated using trace references.
*
- * <p>If {@link #startupList} is set to a concrete startup list, YouTube will be build with layout
- * optimizations enabled.
+ * <p>If {@link #startupProfile} is set to a concrete startup list, YouTube will be build with
+ * layout optimizations enabled.
*/
@Test
public void testR8() throws Exception {
@@ -146,12 +145,10 @@
testBuilder ->
testBuilder.addOptionsModification(
options -> {
- if (startupList != null) {
+ if (startupProfile != null) {
options
.getStartupOptions()
- .setStartupConfiguration(
- StartupConfiguration.createStartupConfigurationFromFile(
- options.dexItemFactory(), options.reporter, startupList))
+ .setStartupProfile(startupProfile)
.setEnableMinimalStartupDex(enableMinimalStartupDex)
.setEnableStartupBoundaryOptimizations(
enableStartupBoundaryOptimizations);
diff --git a/src/test/java/com/android/tools/r8/internal/startup/ChromeStartupTest.java b/src/test/java/com/android/tools/r8/internal/startup/ChromeStartupTest.java
index 77f33b2..e75c5ba 100644
--- a/src/test/java/com/android/tools/r8/internal/startup/ChromeStartupTest.java
+++ b/src/test/java/com/android/tools/r8/internal/startup/ChromeStartupTest.java
@@ -13,12 +13,12 @@
import com.android.tools.r8.ArchiveProgramResourceProvider;
import com.android.tools.r8.DexIndexedConsumer;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.StringResource;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ThrowableConsumer;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.experimental.startup.StartupConfiguration;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.ZipUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -234,7 +234,7 @@
boolean enableStartupBoundaryOptimizations,
Path outDirectory)
throws Exception {
- Path startupList = chromeDirectory.resolve("startup.txt");
+ StringResource startupProfile = StringResource.fromFile(chromeDirectory.resolve("startup.txt"));
buildR8(
testBuilder ->
testBuilder.addOptionsModification(
@@ -243,9 +243,7 @@
.getStartupOptions()
.setEnableMinimalStartupDex(enableMinimalStartupDex)
.setEnableStartupBoundaryOptimizations(enableStartupBoundaryOptimizations)
- .setStartupConfiguration(
- StartupConfiguration.createStartupConfigurationFromFile(
- options.dexItemFactory(), options.reporter, startupList))),
+ .setStartupProfile(startupProfile)),
outDirectory);
}
diff --git a/src/test/java/com/android/tools/r8/startup/utils/StartupTestingUtils.java b/src/test/java/com/android/tools/r8/startup/utils/StartupTestingUtils.java
index 04d673c..37b75c2 100644
--- a/src/test/java/com/android/tools/r8/startup/utils/StartupTestingUtils.java
+++ b/src/test/java/com/android/tools/r8/startup/utils/StartupTestingUtils.java
@@ -10,17 +10,19 @@
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.D8TestBuilder;
import com.android.tools.r8.D8TestRunResult;
+import com.android.tools.r8.StringResource;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestCompilerBuilder;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ThrowableConsumer;
-import com.android.tools.r8.experimental.startup.StartupConfiguration;
import com.android.tools.r8.experimental.startup.StartupConfigurationParser;
import com.android.tools.r8.experimental.startup.StartupItem;
+import com.android.tools.r8.experimental.startup.StartupProfile;
import com.android.tools.r8.experimental.startup.instrumentation.StartupInstrumentationOptions;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.TypeReference;
@@ -147,8 +149,8 @@
testBuilder.addOptionsModification(
options -> {
DexItemFactory dexItemFactory = options.dexItemFactory();
- StartupConfiguration startupConfiguration =
- StartupConfiguration.builder()
+ StartupProfile startupProfile =
+ StartupProfile.builder()
.apply(
builder ->
startupItems.forEach(
@@ -156,7 +158,9 @@
builder.addStartupItem(
convertStartupItemToDex(startupItem, dexItemFactory))))
.build();
- options.getStartupOptions().setStartupConfiguration(startupConfiguration);
+ StringResource startupProfileResource =
+ StringResource.fromString(startupProfile.serializeToString(), Origin.unknown());
+ options.getStartupOptions().setStartupProfile(startupProfileResource);
});
}