Only allocate timing for tasks to run

Bug: b/399835968
Change-Id: I783950404c8109a302130ef6a7624ad80e547e9d
diff --git a/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java b/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java
index f239b67..defffa3 100644
--- a/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/threads/ThreadTaskUtils.java
@@ -23,7 +23,13 @@
       ThreadTask... tasks)
       throws ExecutionException {
     assert tasks.length > 0;
-    TaskCollection<?> taskCollection = new TaskCollection<>(options, executorService, tasks.length);
+    int tasksToRun = 0;
+    for (ThreadTask task : tasks) {
+      if (task.shouldRun()) {
+        tasksToRun++;
+      }
+    }
+    TaskCollection<?> taskCollection = new TaskCollection<>(options, executorService, tasksToRun);
     if (timingMerger.isEmpty()) {
       for (ThreadTask task : tasks) {
         if (task.shouldRun()) {
@@ -33,13 +39,14 @@
       taskCollection.await();
     } else {
       List<Timing> timings =
-          Arrays.asList(ArrayUtils.filled(new Timing[tasks.length], Timing.empty()));
+          Arrays.asList(ArrayUtils.filled(new Timing[tasksToRun], Timing.empty()));
       int taskIndex = 0;
       for (ThreadTask task : tasks) {
         if (task.shouldRun()) {
           processTaskWithTiming(options, task, taskIndex++, taskCollection, timings);
         }
       }
+      assert tasksToRun == taskIndex;
       taskCollection.await();
       timingMerger.add(timings);
       timingMerger.end();