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