Update profile rewrite tests to inspect individual items of residual
Change-Id: Ic67e741b0dab351247fce98b1dcd2d93b7c9bc91
diff --git a/src/main/java/com/android/tools/r8/utils/ClassReferenceUtils.java b/src/main/java/com/android/tools/r8/utils/ClassReferenceUtils.java
index 072022d..0ee9a72 100644
--- a/src/main/java/com/android/tools/r8/utils/ClassReferenceUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ClassReferenceUtils.java
@@ -45,6 +45,10 @@
}
}
+ public static String toSmaliString(ClassReference classReference) {
+ return classReference.getDescriptor();
+ }
+
public static DexType toDexType(ClassReference classReference, DexItemFactory dexItemFactory) {
return dexItemFactory.createType(classReference.getDescriptor());
}
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 e192b41..1d08f27 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
@@ -79,7 +79,7 @@
.build();
}
- public ExternalArtProfile getExpectedResidualArtProfile(CodeInspector inspector) {
+ private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
ClassSubject barClassSubject = inspector.clazz(Bar.class);
assertThat(barClassSubject, isPresentAndRenamed());
@@ -89,24 +89,13 @@
MethodSubject worldMethodSubject = barClassSubject.uniqueMethodWithOriginalName("world");
assertThat(worldMethodSubject, isPresentAndRenamed());
- return ExternalArtProfile.builder()
- .addRules(
- ExternalArtProfileClassRule.builder().setClassReference(mainClassReference).build(),
- ExternalArtProfileMethodRule.builder().setMethodReference(mainMethodReference).build(),
- ExternalArtProfileClassRule.builder()
- .setClassReference(barClassSubject.getFinalReference())
- .build(),
- ExternalArtProfileMethodRule.builder()
- .setMethodReference(helloMethodSubject.getFinalReference())
- .build(),
- ExternalArtProfileMethodRule.builder()
- .setMethodReference(worldMethodSubject.getFinalReference())
- .build())
- .build();
- }
-
- private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
- profileInspector.assertEqualTo(getExpectedResidualArtProfile(inspector));
+ profileInspector
+ .assertContainsClassRules(mainClassReference, barClassSubject.getFinalReference())
+ .assertContainsMethodRules(
+ mainMethodReference,
+ helloMethodSubject.getFinalReference(),
+ worldMethodSubject.getFinalReference())
+ .assertContainsNoOtherRules();
}
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 c68b02f..bbef17f 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
@@ -78,33 +78,22 @@
.build();
}
- private ExternalArtProfile getExpectedResidualArtProfile(CodeInspector inspector) {
+ private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
ClassSubject greeterClassSubject = inspector.clazz(Greeter.class);
assertThat(greeterClassSubject, isPresentAndRenamed());
MethodSubject greetMethodSubject = greeterClassSubject.uniqueMethodWithOriginalName("greet");
assertThat(greetMethodSubject, isPresentAndRenamed());
- return ExternalArtProfile.builder()
- .addRules(
- ExternalArtProfileClassRule.builder().setClassReference(mainClassReference).build(),
- ExternalArtProfileMethodRule.builder()
- .setMethodReference(mainMethodReference)
- .setMethodRuleInfo(ArtProfileMethodRuleInfoImpl.builder().setIsStartup().build())
- .build(),
- ExternalArtProfileClassRule.builder()
- .setClassReference(greeterClassSubject.getFinalReference())
- .build(),
- ExternalArtProfileMethodRule.builder()
- .setMethodReference(greetMethodSubject.getFinalReference())
- .setMethodRuleInfo(
- ArtProfileMethodRuleInfoImpl.builder().setIsHot().setIsPostStartup().build())
- .build())
- .build();
- }
-
- private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
- profileInspector.assertEqualTo(getExpectedResidualArtProfile(inspector));
+ profileInspector
+ .assertContainsClassRules(mainClassReference, greeterClassSubject.getFinalReference())
+ .inspectMethodRule(
+ mainMethodReference,
+ ruleInspector -> ruleInspector.assertIsStartup().assertNotHot().assertNotPostStartup())
+ .inspectMethodRule(
+ greetMethodSubject.getFinalReference(),
+ ruleInspector -> ruleInspector.assertIsHot().assertIsPostStartup().assertNotStartup())
+ .assertContainsNoOtherRules();
}
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 1a4bfda..3cd8e10 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
@@ -86,15 +86,6 @@
.build();
}
- private ExternalArtProfile getExpectedResidualArtProfile(MethodSubject forEachMethodSubject) {
- return ExternalArtProfile.builder()
- .addRule(
- ExternalArtProfileMethodRule.builder()
- .setMethodReference(forEachMethodSubject.getFinalReference())
- .build())
- .build();
- }
-
private void inspect(ArtProfileInspector profileInspector, CodeInspector inspector) {
ClassSubject consumerClassSubject =
inspector.clazz(
@@ -112,7 +103,7 @@
&& libraryDesugaringSpecification == LibraryDesugaringSpecification.JDK8));
assertEquals(consumerClassSubject.asTypeSubject(), forEachMethodSubject.getParameter(0));
- profileInspector.assertEqualTo(getExpectedResidualArtProfile(forEachMethodSubject));
+ profileInspector.assertContainsMethodRule(forEachMethodSubject).assertContainsNoOtherRules();
}
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 5b23bff..e45e4a5 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
@@ -69,14 +69,11 @@
}
private void inspectResidualArtProfile(ArtProfileInspector profileInspector) {
- if (parameters.isCfRuntime()) {
- 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.
- profileInspector.assertEqualTo(getArtProfile());
- }
+ // TODO(b/265729283): Since Main.main() is in the art profile, so should the two synthetic
+ // lambdas be when compiling to dex.
+ profileInspector
+ .assertContainsMethodRule(MethodReferenceUtils.mainMethod(Main.class))
+ .assertContainsNoOtherRules();
}
static class Main {
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 9dd4d42..9951db3 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
@@ -9,9 +9,8 @@
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.utils.StringUtils;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.LinkedHashMap;
+import java.util.Map;
import java.util.function.Consumer;
/**
@@ -24,9 +23,49 @@
*/
public class ExternalArtProfile {
- private final List<ExternalArtProfileRule> rules;
+ private abstract static class ReferenceBox<R> {
- ExternalArtProfile(List<ExternalArtProfileRule> rules) {
+ private final R reference;
+
+ ReferenceBox(R reference) {
+ this.reference = reference;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ ReferenceBox<?> that = (ReferenceBox<?>) o;
+ return reference.equals(that.reference);
+ }
+
+ @Override
+ public int hashCode() {
+ return reference.hashCode();
+ }
+ }
+
+ private static class ClassReferenceBox extends ReferenceBox<ClassReference> {
+
+ ClassReferenceBox(ClassReference reference) {
+ super(reference);
+ }
+ }
+
+ private static class MethodReferenceBox extends ReferenceBox<MethodReference> {
+
+ MethodReferenceBox(MethodReference reference) {
+ super(reference);
+ }
+ }
+
+ private final Map<ReferenceBox<?>, ExternalArtProfileRule> rules;
+
+ ExternalArtProfile(Map<ReferenceBox<?>, ExternalArtProfileRule> rules) {
this.rules = rules;
}
@@ -34,14 +73,30 @@
return new Builder();
}
+ public boolean containsClassRule(ClassReference classReference) {
+ return rules.containsKey(new ClassReferenceBox(classReference));
+ }
+
+ public boolean containsMethodRule(MethodReference methodReference) {
+ return rules.containsKey(new MethodReferenceBox(methodReference));
+ }
+
public void forEach(
Consumer<ExternalArtProfileClassRule> classRuleConsumer,
Consumer<ExternalArtProfileMethodRule> methodRuleConsumer) {
- for (ExternalArtProfileRule rule : rules) {
+ for (ExternalArtProfileRule rule : rules.values()) {
rule.accept(classRuleConsumer, methodRuleConsumer);
}
}
+ public ExternalArtProfileClassRule getClassRule(ClassReference classReference) {
+ return (ExternalArtProfileClassRule) rules.get(new ClassReferenceBox(classReference));
+ }
+
+ public ExternalArtProfileMethodRule getMethodRule(MethodReference methodReference) {
+ return (ExternalArtProfileMethodRule) rules.get(new MethodReferenceBox(methodReference));
+ }
+
public int size() {
return rules.size();
}
@@ -65,12 +120,13 @@
@Override
public String toString() {
- return StringUtils.join(System.lineSeparator(), rules, ExternalArtProfileRule::toString);
+ return StringUtils.join(
+ System.lineSeparator(), rules.values(), ExternalArtProfileRule::toString);
}
public static class Builder {
- private final List<ExternalArtProfileRule> rules = new ArrayList<>();
+ private final Map<ReferenceBox<?>, ExternalArtProfileRule> rules = new LinkedHashMap<>();
public Builder addClassRule(ClassReference classReference) {
return addRule(
@@ -91,12 +147,17 @@
}
public Builder addRule(ExternalArtProfileRule rule) {
- rules.add(rule);
+ rule.accept(
+ classRule -> rules.put(new ClassReferenceBox(classRule.getClassReference()), classRule),
+ methodRule ->
+ rules.put(new MethodReferenceBox(methodRule.getMethodReference()), methodRule));
return this;
}
public Builder addRules(ExternalArtProfileRule... rules) {
- Collections.addAll(this.rules, rules);
+ for (ExternalArtProfileRule rule : rules) {
+ addRule(rule);
+ }
return this;
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
index d6cd80a..956cd6e 100644
--- a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
+++ b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.references.ClassReference;
import java.util.function.Consumer;
+import java.util.function.Predicate;
/**
* Represents a class rule from an ART baseline profile, backed by {@link ClassReference}. Class
@@ -36,6 +37,13 @@
}
@Override
+ public boolean test(
+ Predicate<ExternalArtProfileClassRule> classRuleConsumer,
+ Predicate<ExternalArtProfileMethodRule> methodRuleConsumer) {
+ return classRuleConsumer.test(this);
+ }
+
+ @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
index 96943a6..4eadead 100644
--- a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
+++ b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.utils.MethodReferenceUtils;
import java.util.function.Consumer;
+import java.util.function.Predicate;
/** Represents a method rule from an ART baseline profile, backed by {@link MethodReference}. */
public class ExternalArtProfileMethodRule extends ExternalArtProfileRule {
@@ -44,6 +45,13 @@
}
@Override
+ public boolean test(
+ Predicate<ExternalArtProfileClassRule> classRuleConsumer,
+ Predicate<ExternalArtProfileMethodRule> methodRuleConsumer) {
+ return methodRuleConsumer.test(this);
+ }
+
+ @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
index bd3c99e..7138589 100644
--- a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
+++ b/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
@@ -5,10 +5,15 @@
package com.android.tools.r8.profile.art.model;
import java.util.function.Consumer;
+import java.util.function.Predicate;
public abstract class ExternalArtProfileRule {
public abstract void accept(
Consumer<ExternalArtProfileClassRule> classRuleConsumer,
Consumer<ExternalArtProfileMethodRule> methodRuleConsumer);
+
+ public abstract boolean test(
+ Predicate<ExternalArtProfileClassRule> classRuleConsumer,
+ Predicate<ExternalArtProfileMethodRule> methodRuleConsumer);
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
new file mode 100644
index 0000000..eded89d
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
@@ -0,0 +1,16 @@
+// 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 com.android.tools.r8.profile.art.model.ExternalArtProfileClassRule;
+
+public class ArtProfileClassRuleInspector {
+
+ private final ExternalArtProfileClassRule classRule;
+
+ ArtProfileClassRuleInspector(ExternalArtProfileClassRule classRule) {
+ this.classRule = classRule;
+ }
+}
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
index af0a9a9..22b5370 100644
--- 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
@@ -4,15 +4,28 @@
package com.android.tools.r8.profile.art.utils;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
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.references.ClassReference;
+import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Consumer;
public class ArtProfileInspector {
private final ExternalArtProfile artProfile;
+ private final Set<ClassReference> checkedClassReferences = new HashSet<>();
+ private final Set<MethodReference> checkedMethodReferences = new HashSet<>();
+
public ArtProfileInspector(ExternalArtProfile artProfile) {
this.artProfile = artProfile;
}
@@ -22,13 +35,63 @@
return this;
}
- public ArtProfileInspector assertEqualTo(ExternalArtProfile otherArtProfile) {
- assertEquals(otherArtProfile, artProfile);
+ public ArtProfileInspector assertNotEmpty() {
+ assertNotEquals(0, artProfile.size());
return this;
}
- public ArtProfileInspector assertNotEmpty() {
- assertNotEquals(0, artProfile.size());
+ public ArtProfileInspector assertContainsClassRule(ClassReference classReference) {
+ assertThat(artProfile, ArtProfileMatchers.containsClassRule(classReference));
+ checkedClassReferences.add(classReference);
+ return this;
+ }
+
+ public ArtProfileInspector assertContainsClassRule(ClassSubject classSubject) {
+ return assertContainsClassRule(classSubject.getFinalReference());
+ }
+
+ public ArtProfileInspector assertContainsClassRules(ClassReference... classReferences) {
+ for (ClassReference classReference : classReferences) {
+ assertContainsClassRule(classReference);
+ }
+ return this;
+ }
+
+ public ArtProfileInspector assertContainsMethodRule(MethodReference methodReference) {
+ assertThat(artProfile, ArtProfileMatchers.containsMethodRule(methodReference));
+ checkedMethodReferences.add(methodReference);
+ return this;
+ }
+
+ public ArtProfileInspector assertContainsMethodRule(MethodSubject methodSubject) {
+ return assertContainsMethodRule(methodSubject.getFinalReference());
+ }
+
+ public ArtProfileInspector assertContainsMethodRules(MethodReference... methodReferences) {
+ for (MethodReference methodReference : methodReferences) {
+ assertContainsMethodRule(methodReference);
+ }
+ return this;
+ }
+
+ public ArtProfileInspector assertContainsNoOtherRules() {
+ assertEquals(checkedClassReferences.size() + checkedMethodReferences.size(), artProfile.size());
+ return this;
+ }
+
+ public ArtProfileInspector inspectClassRule(
+ ClassReference classReference, Consumer<ArtProfileClassRuleInspector> inspector) {
+ assertContainsClassRule(classReference);
+ ExternalArtProfileClassRule classRule = artProfile.getClassRule(classReference);
+ inspector.accept(new ArtProfileClassRuleInspector(classRule));
+ return this;
+ }
+
+ public ArtProfileInspector inspectMethodRule(
+ MethodReference methodReference, Consumer<ArtProfileMethodRuleInspector> inspector) {
+ assertContainsMethodRule(methodReference);
+ ExternalArtProfileMethodRule methodRule = artProfile.getMethodRule(methodReference);
+ inspector.accept(new ArtProfileMethodRuleInspector(methodRule));
return this;
}
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
new file mode 100644
index 0000000..64355a9
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
@@ -0,0 +1,72 @@
+// 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 com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.android.tools.r8.profile.art.model.ExternalArtProfile;
+import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.utils.ClassReferenceUtils;
+import com.android.tools.r8.utils.MethodReferenceUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+
+public class ArtProfileMatchers {
+
+ public static Matcher<ExternalArtProfile> containsClassRule(ClassReference classReference) {
+ return new TypeSafeMatcher<ExternalArtProfile>() {
+ @Override
+ protected boolean matchesSafely(ExternalArtProfile subject) {
+ return subject.containsClassRule(classReference);
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText(
+ "contains class rule " + ClassReferenceUtils.toSmaliString(classReference));
+ }
+
+ @Override
+ public void describeMismatchSafely(ExternalArtProfile subject, Description description) {
+ description.appendText("profile did not");
+ }
+ };
+ }
+
+ public static Matcher<ExternalArtProfile> containsClassRule(ClassSubject classSubject) {
+ assertThat(classSubject, isPresent());
+ return containsClassRule(classSubject.getFinalReference());
+ }
+
+ public static Matcher<ExternalArtProfile> containsMethodRule(MethodReference methodReference) {
+ return new TypeSafeMatcher<ExternalArtProfile>() {
+ @Override
+ protected boolean matchesSafely(ExternalArtProfile subject) {
+ return subject.containsMethodRule(methodReference);
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText(
+ "contains method rule " + MethodReferenceUtils.toSmaliString(methodReference));
+ }
+
+ @Override
+ public void describeMismatchSafely(ExternalArtProfile subject, Description description) {
+ description.appendText("profile did not");
+ }
+ };
+ }
+
+ public static Matcher<ExternalArtProfile> containsMethodRule(MethodSubject methodSubject) {
+ assertThat(methodSubject, isPresent());
+ return containsMethodRule(methodSubject.getFinalReference());
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
new file mode 100644
index 0000000..fbca727
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
@@ -0,0 +1,49 @@
+// 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.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import com.android.tools.r8.profile.art.model.ExternalArtProfileMethodRule;
+
+public class ArtProfileMethodRuleInspector {
+
+ private final ExternalArtProfileMethodRule methodRule;
+
+ ArtProfileMethodRuleInspector(ExternalArtProfileMethodRule methodRule) {
+ this.methodRule = methodRule;
+ }
+
+ public ArtProfileMethodRuleInspector assertIsHot() {
+ assertTrue(methodRule.getMethodRuleInfo().isHot());
+ return this;
+ }
+
+ public ArtProfileMethodRuleInspector assertIsStartup() {
+ assertTrue(methodRule.getMethodRuleInfo().isStartup());
+ return this;
+ }
+
+ public ArtProfileMethodRuleInspector assertIsPostStartup() {
+ assertTrue(methodRule.getMethodRuleInfo().isPostStartup());
+ return this;
+ }
+
+ public ArtProfileMethodRuleInspector assertNotHot() {
+ assertFalse(methodRule.getMethodRuleInfo().isHot());
+ return this;
+ }
+
+ public ArtProfileMethodRuleInspector assertNotStartup() {
+ assertFalse(methodRule.getMethodRuleInfo().isStartup());
+ return this;
+ }
+
+ public ArtProfileMethodRuleInspector assertNotPostStartup() {
+ assertFalse(methodRule.getMethodRuleInfo().isPostStartup());
+ return this;
+ }
+}