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();
   }
