Add SystemUI container DEX benchmark
Bug: b/422947619
Change-Id: Iba6bee59b287feab44b773e5af5e71836b0b676b
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkConfig.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkConfig.java
index bb462ed..0c1197b 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkConfig.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkConfig.java
@@ -90,6 +90,7 @@
private int fromRevision = -1;
private BenchmarkTimeout timeout = null;
private boolean measureWarmup = false;
+ private boolean enableDex2Oat = true;
private boolean enableDex2OatVerification = true;
private Builder() {}
@@ -138,6 +139,7 @@
dependencies,
timeout,
measureWarmup,
+ enableDex2Oat,
enableDex2OatVerification);
}
@@ -196,6 +198,11 @@
return this;
}
+ public Builder setEnableDex2Oat(boolean enableDex2Oat) {
+ this.enableDex2Oat = enableDex2Oat;
+ return this;
+ }
+
public Builder setEnableDex2OatVerification(boolean enableDex2OatVerification) {
this.enableDex2OatVerification = enableDex2OatVerification;
return this;
@@ -243,6 +250,7 @@
private final int fromRevision;
private final BenchmarkTimeout timeout;
private final boolean measureWarmup;
+ private final boolean enableDex2Oat;
private final boolean enableDex2OatVerification;
private BenchmarkConfig(
@@ -255,6 +263,7 @@
Collection<BenchmarkDependency> dependencies,
BenchmarkTimeout timeout,
boolean measureWarmup,
+ boolean enableDex2Oat,
boolean enableDex2OatVerification) {
this.id = new BenchmarkIdentifier(name, target);
this.method = benchmarkMethod;
@@ -264,6 +273,7 @@
this.dependencies = dependencies;
this.timeout = timeout;
this.measureWarmup = measureWarmup;
+ this.enableDex2Oat = enableDex2Oat;
this.enableDex2OatVerification = enableDex2OatVerification;
}
@@ -328,6 +338,10 @@
return timeout;
}
+ public boolean isDex2OatEnabled() {
+ return enableDex2Oat;
+ }
+
public boolean isDex2OatVerificationEnabled() {
return enableDex2OatVerification;
}
diff --git a/src/test/java/com/android/tools/r8/benchmarks/appdumps/AppDumpBenchmarkBuilder.java b/src/test/java/com/android/tools/r8/benchmarks/appdumps/AppDumpBenchmarkBuilder.java
index dc7a609..77e83f2 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/appdumps/AppDumpBenchmarkBuilder.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/appdumps/AppDumpBenchmarkBuilder.java
@@ -68,6 +68,9 @@
private CompilationMode compilationMode;
private boolean enableLibraryDesugaring = true;
private boolean enableResourceShrinking = false;
+ private boolean enableContainerDex = false;
+ private boolean enableDex2Oat = true;
+ private boolean enableDex2OatVerification = true;
private boolean runtimeOnly = false;
private int warmupIterations = 1;
private final List<String> programPackages = new ArrayList<>();
@@ -96,6 +99,24 @@
return this;
}
+ public AppDumpBenchmarkBuilder setEnableContainerDex(boolean enableContainerDex) {
+ this.enableContainerDex = enableContainerDex;
+ return this;
+ }
+
+ public AppDumpBenchmarkBuilder setEnableDex2Oat(boolean enableDex2Oat) {
+ this.enableDex2Oat = enableDex2Oat;
+ if (!enableDex2Oat) {
+ this.enableDex2OatVerification = enableDex2Oat;
+ }
+ return this;
+ }
+
+ public AppDumpBenchmarkBuilder setEnableDex2OatVerification(boolean enableDex2OatVerification) {
+ this.enableDex2OatVerification = enableDex2OatVerification;
+ return this;
+ }
+
public AppDumpBenchmarkBuilder setName(String name) {
this.name = name;
return this;
@@ -153,9 +174,8 @@
.setFromRevision(fromRevision)
.addDependency(dumpDependency)
.measureRunTime()
- // TODO(b/373550435): Update dex2oat to enable checking absence of verification errors
- // on SystemUI.
- .setEnableDex2OatVerification(!name.equals("SystemUIApp"))
+ .setEnableDex2Oat(enableDex2Oat)
+ .setEnableDex2OatVerification(enableDex2OatVerification)
.setTimeout(10, TimeUnit.MINUTES);
if (!runtimeOnly) {
builder
@@ -198,9 +218,8 @@
.measureComposableInstructionCodeSize()
.measureDexSegmentsCodeSize()
.measureDex2OatCodeSize()
- // TODO(b/373550435): Update dex2oat to enable checking absence of verification errors
- // on SystemUI.
- .setEnableDex2OatVerification(!name.equals("SystemUIAppPartialShrinking"))
+ .setEnableDex2Oat(enableDex2Oat)
+ .setEnableDex2OatVerification(enableDex2OatVerification)
.setTimeout(10, TimeUnit.MINUTES);
if (enableResourceShrinking) {
builder.measureResourceSize();
@@ -362,6 +381,12 @@
b ->
b.enableOptimizedShrinking()
.setAndroidResourcesFromPath(dump.getAndroidResources()))
+ .applyIf(
+ builder.enableContainerDex,
+ b ->
+ b.addOptionsModification(
+ options ->
+ options.getTestingOptions().forceDexContainerFormat = true))
.apply(
r -> {
try {
@@ -371,6 +396,7 @@
.benchmarkDexSegmentsCodeSize(results)
.benchmarkDex2OatCodeSize(
results,
+ environment.getConfig().isDex2OatEnabled(),
environment.getConfig().isDex2OatVerificationEnabled())
.applyIf(
environment
@@ -442,6 +468,12 @@
b ->
b.enableOptimizedShrinking()
.setAndroidResourcesFromPath(dump.getAndroidResources()))
+ .applyIf(
+ builder.enableContainerDex,
+ b ->
+ b.addOptionsModification(
+ options ->
+ options.getTestingOptions().forceDexContainerFormat = true))
.apply(
r ->
r.benchmarkCompile(results)
@@ -450,6 +482,7 @@
.benchmarkDexSegmentsCodeSize(results)
.benchmarkDex2OatCodeSize(
results,
+ environment.getConfig().isDex2OatEnabled(),
environment.getConfig().isDex2OatVerificationEnabled())
.applyIf(
environment
@@ -475,6 +508,12 @@
.setMinApi(dumpProperties.getMinApi())
.setMode(builder.compilationMode)
.applyIf(builder.enableLibraryDesugaring, b -> addDesugaredLibrary(b, dump))
+ .applyIf(
+ builder.enableContainerDex,
+ b ->
+ b.addOptionsModification(
+ options ->
+ options.getTestingOptions().forceDexContainerFormat = true))
.benchmarkCompile(results)
.benchmarkCodeSize(results);
});
@@ -482,6 +521,7 @@
private static BenchmarkMethod runIncrementalD8(AppDumpBenchmarkBuilder builder) {
assert builder.compilationMode.isDebug();
+ assert !builder.enableContainerDex;
return environment ->
BenchmarkBase.runner(environment)
.setWarmupIterations(builder.warmupIterations)
diff --git a/src/test/java/com/android/tools/r8/internal/benchmarks/appdumps/SystemUIBenchmarks.java b/src/test/java/com/android/tools/r8/internal/benchmarks/appdumps/SystemUIBenchmarks.java
index a3fc6a1..8db6c3a 100644
--- a/src/test/java/com/android/tools/r8/internal/benchmarks/appdumps/SystemUIBenchmarks.java
+++ b/src/test/java/com/android/tools/r8/internal/benchmarks/appdumps/SystemUIBenchmarks.java
@@ -43,12 +43,18 @@
.setName("SystemUIApp")
.setDumpDependencyPath(dir)
.setEnableResourceShrinking(true)
+ // TODO(b/373550435): Update dex2oat to enable checking absence of verification errors
+ // on SystemUI.
+ .setEnableDex2OatVerification(false)
.setFromRevision(16457)
.buildR8(SystemUIBenchmarks::configure),
AppDumpBenchmarkBuilder.builder()
.setName("SystemUIAppPartial")
.setDumpDependencyPath(dir)
.setEnableResourceShrinking(true)
+ // TODO(b/373550435): Update dex2oat to enable checking absence of verification errors
+ // on SystemUI.
+ .setEnableDex2OatVerification(false)
.setFromRevision(16457)
.buildR8WithPartialShrinking(SystemUIBenchmarks::configurePartialShrinking),
AppDumpBenchmarkBuilder.builder()
@@ -57,7 +63,16 @@
.setEnableResourceShrinking(true)
.setFromRevision(16457)
.setRuntimeOnly()
- .buildR8(SystemUIBenchmarks::configureTreeShaking));
+ .buildR8(SystemUIBenchmarks::configureTreeShaking),
+ AppDumpBenchmarkBuilder.builder()
+ .setName("SystemUIAppContainerDex")
+ .setDumpDependencyPath(dir)
+ .setEnableResourceShrinking(true)
+ .setEnableContainerDex(true)
+ // TODO(b/373550435): Update dex2oat to enable checking container DEX on SystemUI.
+ .setEnableDex2Oat(false)
+ .setFromRevision(16457)
+ .buildR8(SystemUIBenchmarks::configure));
}
private static void configure(R8FullTestBuilder testBuilder) {
diff --git a/src/test/testbase/java/com/android/tools/r8/R8TestCompileResultBase.java b/src/test/testbase/java/com/android/tools/r8/R8TestCompileResultBase.java
index fdf6a8c..083a743 100644
--- a/src/test/testbase/java/com/android/tools/r8/R8TestCompileResultBase.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8TestCompileResultBase.java
@@ -405,15 +405,21 @@
}
@Override
- public CR benchmarkDex2OatCodeSize(BenchmarkResults results, boolean enableDex2OatVerification)
+ public CR benchmarkDex2OatCodeSize(
+ BenchmarkResults results, boolean enableDex2Oat, boolean enableDex2OatVerification)
throws IOException {
if (results.isBenchmarkingCodeSize()) {
- Dex2OatTestRunResult dex2OatTestRunResult =
- runDex2Oat(new DexRuntime(DexVm.Version.LATEST_DEX2OAT)).assertNoLockVerificationErrors();
- if (enableDex2OatVerification) {
- dex2OatTestRunResult.assertNoVerificationErrors();
+ if (enableDex2Oat) {
+ Dex2OatTestRunResult dex2OatTestRunResult =
+ runDex2Oat(new DexRuntime(DexVm.Version.LATEST_DEX2OAT))
+ .assertNoLockVerificationErrors();
+ if (enableDex2OatVerification) {
+ dex2OatTestRunResult.assertNoVerificationErrors();
+ }
+ results.addDex2OatSizeResult(dex2OatTestRunResult.getOatSizeOrDefault(0));
+ } else {
+ results.addDex2OatSizeResult(-1);
}
- results.addDex2OatSizeResult(dex2OatTestRunResult.getOatSizeOrDefault(0));
}
return self();
}
diff --git a/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
index 53fc424..dac774b 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
@@ -762,7 +762,8 @@
throw new Unimplemented();
}
- public CR benchmarkDex2OatCodeSize(BenchmarkResults results, boolean enableDex2OatVerification)
+ public CR benchmarkDex2OatCodeSize(
+ BenchmarkResults results, boolean enableDex2Oat, boolean enableDex2OatVerification)
throws IOException {
throw new Unimplemented();
}