Avoid unnecessary iteration on action inputs. (#16462)
Closes #16118.
PiperOrigin-RevId: 468429355
Change-Id: I3b32a28ce3e7c6711fdc15839e5a88fad812184c
Co-authored-by: Chi Wang <chiwang@google.com>
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java
index 24c9385..c01ce30 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java
@@ -28,6 +28,7 @@
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.SilentCloseable;
@@ -82,13 +83,13 @@
Map<Digest, Message> additionalInputs,
boolean force)
throws IOException, InterruptedException {
- ImmutableSet<Digest> allDigests =
- ImmutableSet.<Digest>builder()
- .addAll(merkleTree.getAllDigests())
- .addAll(additionalInputs.keySet())
- .build();
+ Iterable<Digest> merkleTreeAllDigests;
+ try (SilentCloseable s = Profiler.instance().profile("merkleTree.getAllDigests()")) {
+ merkleTreeAllDigests = merkleTree.getAllDigests();
+ }
+ Iterable<Digest> allDigests = Iterables.concat(merkleTreeAllDigests, additionalInputs.keySet());
- if (allDigests.isEmpty()) {
+ if (Iterables.isEmpty(allDigests)) {
return;
}