Reland "Add new profile inspection to compile results"
This reverts commit 172cfac106fb96a0f9d9a41af6a3bce824f921d0.
Change-Id: Ie455d1cb86bad24571c68d2c07d0df4be27202fe
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/java/com/android/tools/r8/D8TestBuilder.java
index de0565f..c8c21fa 100644
--- a/src/test/java/com/android/tools/r8/D8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/D8TestBuilder.java
@@ -9,12 +9,16 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.profile.art.ArtProfileConsumer;
import com.android.tools.r8.profile.art.ArtProfileProvider;
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
import com.android.tools.r8.startup.StartupProfileProvider;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import java.nio.file.Path;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -32,6 +36,7 @@
private StringBuilder proguardMapOutputBuilder = null;
private boolean enableMissingLibraryApiModeling = true;
+ private List<ExternalArtProfile> residualArtProfiles = new ArrayList<>();
@Override
public boolean isD8TestBuilder() {
@@ -134,6 +139,16 @@
return self();
}
+ public D8TestBuilder addArtProfileForRewriting(ArtProfileProvider artProfileProvider) {
+ return addArtProfileForRewriting(
+ artProfileProvider,
+ ArtProfileTestingUtils.createResidualArtProfileConsumer(residualArtProfiles::add));
+ }
+
+ public D8TestBuilder addArtProfileForRewriting(ExternalArtProfile artProfile) {
+ return addArtProfileForRewriting(ArtProfileTestingUtils.createArtProfileProvider(artProfile));
+ }
+
public D8TestBuilder addArtProfileForRewriting(
ArtProfileProvider artProfileProvider, ArtProfileConsumer residualArtProfileConsumer) {
builder.addArtProfileForRewriting(artProfileProvider, residualArtProfileConsumer);
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index a844c1f..34f8a0b 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -17,6 +17,8 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.profile.art.ArtProfileConsumer;
import com.android.tools.r8.profile.art.ArtProfileProvider;
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
import com.android.tools.r8.shaking.CheckEnumUnboxedRule;
import com.android.tools.r8.shaking.CollectingGraphConsumer;
import com.android.tools.r8.shaking.KeepUnusedReturnValueRule;
@@ -68,6 +70,7 @@
private boolean allowUnusedProguardConfigurationRules = false;
private boolean enableMissingLibraryApiModeling = true;
private CollectingGraphConsumer graphConsumer = null;
+ private List<ExternalArtProfile> residualArtProfiles = new ArrayList<>();
private List<String> keepRules = new ArrayList<>();
private List<Path> mainDexRulesFiles = new ArrayList<>();
private List<String> applyMappingMaps = new ArrayList<>();
@@ -158,7 +161,8 @@
createDefaultProguardMapConsumer ? proguardMapBuilder.toString() : null,
graphConsumer,
getMinApiLevel(),
- features);
+ features,
+ residualArtProfiles);
switch (allowedDiagnosticMessages) {
case ALL:
compileResult.getDiagnosticMessages().assertAllDiagnosticsMatch(new IsAnything<>());
@@ -782,6 +786,16 @@
return self();
}
+ public T addArtProfileForRewriting(ArtProfileProvider artProfileProvider) {
+ return addArtProfileForRewriting(
+ artProfileProvider,
+ ArtProfileTestingUtils.createResidualArtProfileConsumer(residualArtProfiles::add));
+ }
+
+ public T addArtProfileForRewriting(ExternalArtProfile artProfile) {
+ return addArtProfileForRewriting(ArtProfileTestingUtils.createArtProfileProvider(artProfile));
+ }
+
public T addArtProfileForRewriting(
ArtProfileProvider artProfileProvider, ArtProfileConsumer residualArtProfileConsumer) {
builder.addArtProfileForRewriting(artProfileProvider, residualArtProfileConsumer);
diff --git a/src/test/java/com/android/tools/r8/R8TestCompileResult.java b/src/test/java/com/android/tools/r8/R8TestCompileResult.java
index 688ab43..b3b6e31 100644
--- a/src/test/java/com/android/tools/r8/R8TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/R8TestCompileResult.java
@@ -9,11 +9,14 @@
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.dexsplitter.SplitterTestBase.SplitRunner;
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.shaking.CollectingGraphConsumer;
import com.android.tools.r8.shaking.ProguardConfiguration;
import com.android.tools.r8.shaking.ProguardConfigurationRule;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.ThrowingBiConsumer;
import com.android.tools.r8.utils.ThrowingConsumer;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -22,6 +25,7 @@
import java.nio.file.Path;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
public class R8TestCompileResult extends TestCompileResult<R8TestCompileResult, R8TestRunResult> {
@@ -31,6 +35,7 @@
private final String proguardMap;
private final CollectingGraphConsumer graphConsumer;
private final List<Path> features;
+ private final List<ExternalArtProfile> residualArtProfiles;
R8TestCompileResult(
TestState state,
@@ -42,13 +47,15 @@
String proguardMap,
CollectingGraphConsumer graphConsumer,
int minApiLevel,
- List<Path> features) {
+ List<Path> features,
+ List<ExternalArtProfile> residualArtProfiles) {
super(state, app, minApiLevel, outputMode, libraryDesugaringTestConfiguration);
this.proguardConfiguration = proguardConfiguration;
this.syntheticProguardRules = syntheticProguardRules;
this.proguardMap = proguardMap;
this.graphConsumer = graphConsumer;
this.features = features;
+ this.residualArtProfiles = residualArtProfiles;
}
@Override
@@ -124,6 +131,19 @@
return self();
}
+ public <E extends Throwable> R8TestCompileResult inspectResidualArtProfile(
+ ThrowingConsumer<ArtProfileInspector, E> consumer) throws E, IOException, ExecutionException {
+ return inspectResidualArtProfile(
+ (rewrittenArtProfile, inspector) -> consumer.accept(rewrittenArtProfile));
+ }
+
+ public <E extends Throwable> R8TestCompileResult inspectResidualArtProfile(
+ ThrowingBiConsumer<ArtProfileInspector, CodeInspector, E> consumer) throws E, IOException {
+ assertEquals(1, residualArtProfiles.size());
+ consumer.accept(new ArtProfileInspector(residualArtProfiles.iterator().next()), inspector());
+ return self();
+ }
+
public GraphInspector graphInspector() throws IOException {
assert graphConsumer != null;
return new GraphInspector(graphConsumer, inspector());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index 4144aaa..ed81c32 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -27,6 +27,8 @@
import com.android.tools.r8.profile.art.ArtProfileConsumer;
import com.android.tools.r8.profile.art.ArtProfileForRewriting;
import com.android.tools.r8.profile.art.ArtProfileProvider;
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
import com.android.tools.r8.tracereferences.TraceReferences;
import com.android.tools.r8.utils.ConsumerUtils;
import com.android.tools.r8.utils.FileUtils;
@@ -58,6 +60,7 @@
private CustomLibrarySpecification customLibrarySpecification = null;
private TestingKeepRuleConsumer keepRuleConsumer = null;
+ private List<ExternalArtProfile> l8ResidualArtProfiles = new ArrayList<>();
public DesugaredLibraryTestBuilder(
T test,
@@ -378,7 +381,8 @@
libraryDesugaringSpecification,
compilationSpecification,
customLibCompile,
- l8Compile);
+ l8Compile,
+ l8ResidualArtProfiles);
}
private D8TestCompileResult compileCustomLib() throws CompilationFailedException {
@@ -501,7 +505,18 @@
return this;
}
- public DesugaredLibraryTestBuilder<?> addL8ArtProfileForRewriting(
+ public DesugaredLibraryTestBuilder<T> addL8ArtProfileForRewriting(
+ ArtProfileProvider artProfileProvider) {
+ return addL8ArtProfileForRewriting(
+ artProfileProvider,
+ ArtProfileTestingUtils.createResidualArtProfileConsumer(l8ResidualArtProfiles::add));
+ }
+
+ public DesugaredLibraryTestBuilder<T> addL8ArtProfileForRewriting(ExternalArtProfile artProfile) {
+ return addL8ArtProfileForRewriting(ArtProfileTestingUtils.createArtProfileProvider(artProfile));
+ }
+
+ public DesugaredLibraryTestBuilder<T> addL8ArtProfileForRewriting(
ArtProfileProvider artProfileProvider, ArtProfileConsumer residualArtProfileConsumer) {
l8ArtProfilesForRewriting.add(
new ArtProfileForRewriting(artProfileProvider, residualArtProfileConsumer));
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
index 3172876..d49f2ef 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
@@ -4,6 +4,8 @@
package com.android.tools.r8.desugar.desugaredlibrary.test;
+import static org.junit.Assert.assertEquals;
+
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.L8TestCompileResult;
@@ -13,6 +15,9 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
+import com.android.tools.r8.utils.ThrowingBiConsumer;
import com.android.tools.r8.utils.ThrowingConsumer;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
@@ -30,6 +35,7 @@
private final CompilationSpecification compilationSpecification;
private final D8TestCompileResult customLibCompile;
private final L8TestCompileResult l8Compile;
+ private final List<ExternalArtProfile> l8ResidualArtProfiles;
// In case of Cf2Cf desugaring the run on dex, the compileResult is the Cf desugaring result
// while the runnableCompiledResult is the dexed compiledResult used to run on dex.
private final TestCompileResult<?, ? extends SingleTestRunResult<?>> runnableCompiledResult;
@@ -41,7 +47,8 @@
LibraryDesugaringSpecification libraryDesugaringSpecification,
CompilationSpecification compilationSpecification,
D8TestCompileResult customLibCompile,
- L8TestCompileResult l8Compile)
+ L8TestCompileResult l8Compile,
+ List<ExternalArtProfile> l8ResidualArtProfiles)
throws CompilationFailedException, IOException {
this.test = test;
this.compileResult = compileResult;
@@ -50,6 +57,7 @@
this.compilationSpecification = compilationSpecification;
this.customLibCompile = customLibCompile;
this.l8Compile = l8Compile;
+ this.l8ResidualArtProfiles = l8ResidualArtProfiles;
this.runnableCompiledResult = computeRunnableCompiledResult();
}
@@ -66,6 +74,20 @@
return this;
}
+ public <E extends Throwable> DesugaredLibraryTestCompileResult<T> inspectL8ResidualArtProfile(
+ ThrowingConsumer<ArtProfileInspector, E> consumer) throws E, IOException, ExecutionException {
+ return inspectL8ResidualArtProfile(
+ (rewrittenArtProfile, inspector) -> consumer.accept(rewrittenArtProfile));
+ }
+
+ public <E extends Throwable> DesugaredLibraryTestCompileResult<T> inspectL8ResidualArtProfile(
+ ThrowingBiConsumer<ArtProfileInspector, CodeInspector, E> consumer) throws E, IOException {
+ assertEquals(1, l8ResidualArtProfiles.size());
+ consumer.accept(
+ new ArtProfileInspector(l8ResidualArtProfiles.iterator().next()), l8Inspector());
+ return this;
+ }
+
public <E extends Throwable> DesugaredLibraryTestCompileResult<T> inspect(
ThrowingConsumer<CodeInspector, E> consumer) throws IOException, E {
compileResult.inspect(consumer);
diff --git a/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java
index 922cae7..e192b41 100644
--- a/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java
@@ -6,7 +6,6 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
@@ -15,12 +14,11 @@
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
import com.android.tools.r8.profile.art.model.ExternalArtProfileClassRule;
import com.android.tools.r8.profile.art.model.ExternalArtProfileMethodRule;
-import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.MethodReferenceUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -56,21 +54,17 @@
@Test
public void test() throws Exception {
- Box<ExternalArtProfile> residualArtProfile = new Box<>();
testForR8(Backend.DEX)
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
.addHorizontallyMergedClassesInspector(
inspector ->
inspector.assertMergedInto(Foo.class, Bar.class).assertNoOtherClassesMerged())
- .apply(
- testBuilder ->
- ArtProfileTestingUtils.addArtProfileForRewriting(
- getArtProfile(), residualArtProfile::set, testBuilder))
+ .addArtProfileForRewriting(getArtProfile())
.enableInliningAnnotations()
.setMinApi(AndroidApiLevel.LATEST)
.compile()
- .inspect(inspector -> inspect(inspector, residualArtProfile.get()));
+ .inspectResidualArtProfile(this::inspect);
}
public ExternalArtProfile getArtProfile() {
@@ -111,8 +105,8 @@
.build();
}
- private void inspect(CodeInspector inspector, ExternalArtProfile residualArtProfile) {
- assertEquals(getExpectedResidualArtProfile(inspector), residualArtProfile);
+ private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
+ profileInspector.assertEqualTo(getExpectedResidualArtProfile(inspector));
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java
index c5fb462..c68b02f 100644
--- a/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java
@@ -6,7 +6,6 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
@@ -15,12 +14,11 @@
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
import com.android.tools.r8.profile.art.model.ExternalArtProfileClassRule;
import com.android.tools.r8.profile.art.model.ExternalArtProfileMethodRule;
-import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.MethodReferenceUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -53,18 +51,14 @@
@Test
public void test() throws Exception {
- Box<ExternalArtProfile> residualArtProfile = new Box<>();
testForR8(Backend.DEX)
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .apply(
- testBuilder ->
- ArtProfileTestingUtils.addArtProfileForRewriting(
- getArtProfile(), residualArtProfile::set, testBuilder))
+ .addArtProfileForRewriting(getArtProfile())
.enableInliningAnnotations()
.setMinApi(AndroidApiLevel.LATEST)
.compile()
- .inspect(inspector -> inspect(inspector, residualArtProfile.get()));
+ .inspectResidualArtProfile(this::inspect);
}
private ExternalArtProfile getArtProfile() {
@@ -109,8 +103,8 @@
.build();
}
- private void inspect(CodeInspector inspector, ExternalArtProfile residualArtProfile) {
- assertEquals(getExpectedResidualArtProfile(inspector), residualArtProfile);
+ private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
+ profileInspector.assertEqualTo(getExpectedResidualArtProfile(inspector));
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
index 52e0beb..1a4bfda 100644
--- a/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
@@ -18,10 +18,9 @@
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
import com.android.tools.r8.profile.art.model.ExternalArtProfileMethodRule;
-import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -59,16 +58,12 @@
@Test
public void test() throws Throwable {
Assume.assumeTrue(libraryDesugaringSpecification.hasEmulatedInterfaceDesugaring(parameters));
- Box<ExternalArtProfile> residualArtProfile = new Box<>();
testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .apply(
- testBuilder ->
- ArtProfileTestingUtils.addArtProfileForRewriting(
- getArtProfile(), residualArtProfile::set, testBuilder))
+ .addL8ArtProfileForRewriting(getArtProfile())
.compile()
- .inspectL8(inspector -> inspect(inspector, residualArtProfile.get()))
+ .inspectL8ResidualArtProfile(this::inspect)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("0");
}
@@ -100,7 +95,7 @@
.build();
}
- private void inspect(CodeInspector inspector, ExternalArtProfile residualArtProfile) {
+ private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
ClassSubject consumerClassSubject =
inspector.clazz(
libraryDesugaringSpecification.functionPrefix(parameters) + ".util.function.Consumer");
@@ -117,7 +112,7 @@
&& libraryDesugaringSpecification == LibraryDesugaringSpecification.JDK8));
assertEquals(consumerClassSubject.asTypeSubject(), forEachMethodSubject.getParameter(0));
- assertEquals(getExpectedResidualArtProfile(forEachMethodSubject), residualArtProfile);
+ profileInspector.assertEqualTo(getExpectedResidualArtProfile(forEachMethodSubject));
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/NoSuchClassAndMethodProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/NoSuchClassAndMethodProfileRewritingTest.java
index ea4933c..7b598a1 100644
--- a/src/test/java/com/android/tools/r8/profile/art/NoSuchClassAndMethodProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/NoSuchClassAndMethodProfileRewritingTest.java
@@ -4,14 +4,13 @@
package com.android.tools.r8.profile.art;
-import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
-import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
import org.junit.Test;
@@ -36,12 +35,11 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .apply(
- ArtProfileTestingUtils.addArtProfileForRewriting(
- getArtProfile(), this::inspectResidualArtProfile))
+ .addArtProfileForRewriting(getArtProfile())
.setMinApi(parameters.getApiLevel())
// TODO(b/266178791): Emit a warning for each discarded item.
.compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages)
+ .inspectResidualArtProfile(this::inspectResidualArtProfile)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("Hello, world!");
}
@@ -54,10 +52,10 @@
.build();
}
- private void inspectResidualArtProfile(ExternalArtProfile residualArtProfile) {
+ private void inspectResidualArtProfile(ArtProfileInspector profileInspector) {
// None of the items in the profile exist in the input.
// TODO(b/266178791): Discard items from profile that is not in the input app.
- assertEquals(getArtProfile(), residualArtProfile);
+ profileInspector.assertNotEmpty();
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/NonEmptyToEmptyProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/NonEmptyToEmptyProfileRewritingTest.java
index 4fb34a0..60e14df 100644
--- a/src/test/java/com/android/tools/r8/profile/art/NonEmptyToEmptyProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/NonEmptyToEmptyProfileRewritingTest.java
@@ -7,13 +7,12 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
-import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -39,12 +38,11 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .apply(
- ArtProfileTestingUtils.addArtProfileForRewriting(
- getArtProfile(), this::inspectResidualArtProfile))
+ .addArtProfileForRewriting(getArtProfile())
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
+ .inspectResidualArtProfile(this::inspectResidualArtProfile)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("Hello, world!");
}
@@ -62,9 +60,9 @@
assertThat(mainClassSubject.uniqueMethodWithOriginalName("dead"), isAbsent());
}
- private void inspectResidualArtProfile(ExternalArtProfile residualArtProfile) {
+ private void inspectResidualArtProfile(ArtProfileInspector profileInspector) {
// After shaking of Main.dead() the ART profile should become empty.
- assertEquals(ExternalArtProfile.builder().build(), residualArtProfile);
+ profileInspector.assertEmpty();
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
index 3e9ef1c..5b23bff 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
@@ -7,14 +7,13 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.profile.art.model.ExternalArtProfile;
import com.android.tools.r8.profile.art.model.ExternalArtProfileMethodRule;
-import com.android.tools.r8.profile.art.utils.ArtProfileTestingUtils;
+import com.android.tools.r8.profile.art.utils.ArtProfileInspector;
import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
import com.android.tools.r8.utils.MethodReferenceUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -40,14 +39,12 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .apply(
- testBuilder ->
- ArtProfileTestingUtils.addArtProfileForRewriting(
- getArtProfile(), this::inspectResidualArtProfile, testBuilder))
+ .addArtProfileForRewriting(getArtProfile())
.noHorizontalClassMergingOfSynthetics()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
+ .inspectResidualArtProfile(this::inspectResidualArtProfile)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("Hello, world!");
}
@@ -71,14 +68,14 @@
onlyIf(parameters.isDexRuntime(), isPresent()));
}
- private void inspectResidualArtProfile(ExternalArtProfile residualArtProfile) {
+ private void inspectResidualArtProfile(ArtProfileInspector profileInspector) {
if (parameters.isCfRuntime()) {
- assertEquals(getArtProfile(), residualArtProfile);
+ profileInspector.assertEqualTo(getArtProfile());
} else {
assert parameters.isDexRuntime();
// TODO(b/265729283): Since Main.main() is in the art profile, so should the two synthetic
// lambdas be.
- assertEquals(getArtProfile(), residualArtProfile);
+ profileInspector.assertEqualTo(getArtProfile());
}
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java b/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java
index ba3a623..c22ad2a 100644
--- a/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java
@@ -10,20 +10,13 @@
import static org.hamcrest.CoreMatchers.equalTo;
import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.profile.art.ArtProfileBuilder;
-import com.android.tools.r8.profile.art.ArtProfileClassRuleInfo;
-import com.android.tools.r8.profile.art.ArtProfileConsumer;
-import com.android.tools.r8.profile.art.ArtProfileMethodRuleInfo;
import com.android.tools.r8.profile.art.ArtProfileProvider;
-import com.android.tools.r8.profile.art.ArtProfileRuleConsumer;
-import com.android.tools.r8.references.ClassReference;
-import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.ConsumerUtils;
import com.android.tools.r8.utils.UTF8TextInputStream;
@@ -49,7 +42,7 @@
public void testD8() throws Exception {
testForD8()
.addProgramClasses(Main.class)
- .addArtProfileForRewriting(createArtProfileProvider(), createArtProfileConsumer())
+ .addArtProfileForRewriting(createArtProfileProvider())
.release()
.setMinApi(AndroidApiLevel.LATEST)
.compileWithExpectedDiagnostics(this::inspectDiagnostics);
@@ -60,7 +53,7 @@
testForR8(Backend.DEX)
.addProgramClasses(Main.class)
.addKeepMainRule(Main.class)
- .addArtProfileForRewriting(createArtProfileProvider(), createArtProfileConsumer())
+ .addArtProfileForRewriting(createArtProfileProvider())
.release()
.setMinApi(AndroidApiLevel.LATEST)
.compileWithExpectedDiagnostics(this::inspectDiagnostics);
@@ -83,34 +76,6 @@
};
}
- private ArtProfileConsumer createArtProfileConsumer() {
- return new ArtProfileConsumer() {
-
- @Override
- public ArtProfileRuleConsumer getRuleConsumer() {
- return new ArtProfileRuleConsumer() {
-
- @Override
- public void acceptClassRule(
- ClassReference classReference, ArtProfileClassRuleInfo classRuleInfo) {
- // Ignore.
- }
-
- @Override
- public void acceptMethodRule(
- MethodReference methodReference, ArtProfileMethodRuleInfo methodRuleInfo) {
- // Ignore.
- }
- };
- }
-
- @Override
- public void finished(DiagnosticsHandler handler) {
- // Ignore.
- }
- };
- }
-
private void inspectDiagnostics(TestDiagnosticMessages diagnostics) {
diagnostics.assertErrorsMatch(
allOf(
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
index 0c3ae80..9dd4d42 100644
--- a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
+++ b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
@@ -42,6 +42,10 @@
}
}
+ public int size() {
+ return rules.size();
+ }
+
@Override
public boolean equals(Object obj) {
if (this == obj) {
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
new file mode 100644
index 0000000..af0a9a9
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
@@ -0,0 +1,34 @@
+// Copyright (c) 2023, 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.profile.art.utils;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+
+public class ArtProfileInspector {
+
+ private final ExternalArtProfile artProfile;
+
+ public ArtProfileInspector(ExternalArtProfile artProfile) {
+ this.artProfile = artProfile;
+ }
+
+ public ArtProfileInspector assertEmpty() {
+ assertEquals(0, artProfile.size());
+ return this;
+ }
+
+ public ArtProfileInspector assertEqualTo(ExternalArtProfile otherArtProfile) {
+ assertEquals(otherArtProfile, artProfile);
+ return this;
+ }
+
+ public ArtProfileInspector assertNotEmpty() {
+ assertNotEquals(0, artProfile.size());
+ return this;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
index 697cb87..c86ad4d 100644
--- a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
+++ b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
@@ -5,9 +5,6 @@
package com.android.tools.r8.profile.art.utils;
import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.ThrowableConsumer;
-import com.android.tools.r8.desugar.desugaredlibrary.test.DesugaredLibraryTestBuilder;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.profile.art.ArtProfileBuilder;
import com.android.tools.r8.profile.art.ArtProfileClassRuleInfo;
@@ -24,38 +21,8 @@
public class ArtProfileTestingUtils {
- public static <B extends R8TestBuilder<?>> ThrowableConsumer<B> addArtProfileForRewriting(
- ExternalArtProfile artProfile, Consumer<ExternalArtProfile> residualArtProfileInspector) {
- return testBuilder ->
- testBuilder.addArtProfileForRewriting(
- createArtProfileProvider(artProfile),
- createResidualArtProfileConsumer(residualArtProfileInspector));
- }
-
- /**
- * Adds the given {@param artProfile} as an ART profile for rewriting. The residual ART profile
- * will be forwarded to the given test inspector, {@param residualArtProfileInspector}.
- */
- public static void addArtProfileForRewriting(
- ExternalArtProfile artProfile,
- Consumer<ExternalArtProfile> residualArtProfileInspector,
- R8TestBuilder<?> testBuilder) {
- testBuilder.addArtProfileForRewriting(
- createArtProfileProvider(artProfile),
- createResidualArtProfileConsumer(residualArtProfileInspector));
- }
-
- public static void addArtProfileForRewriting(
- ExternalArtProfile artProfile,
- Consumer<ExternalArtProfile> residualArtProfileInspector,
- DesugaredLibraryTestBuilder<?> testBuilder) {
- testBuilder.addL8ArtProfileForRewriting(
- createArtProfileProvider(artProfile),
- createResidualArtProfileConsumer(residualArtProfileInspector));
- }
-
// Creates an ArtProfileProvider for passing the given ART profile to a D8/L8/R8 compilation.
- private static ArtProfileProvider createArtProfileProvider(ExternalArtProfile artProfile) {
+ public static ArtProfileProvider createArtProfileProvider(ExternalArtProfile artProfile) {
return new ArtProfileProvider() {
@Override
@@ -87,7 +54,7 @@
}
// Creates an ArtProfileConsumer for accepting the residual ART profile from the compilation.
- private static ArtProfileConsumer createResidualArtProfileConsumer(
+ public static ArtProfileConsumer createResidualArtProfileConsumer(
Consumer<ExternalArtProfile> residualArtProfileInspector) {
return new ArtProfileConsumer() {