aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/buildtool
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-07-30 10:56:57 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-30 10:58:20 -0700
commitccb745699953365425c1931c05413d9911e051a8 (patch)
treeb03d622589e005c48a99bd779de32d35f3160237 /src/main/java/com/google/devtools/build/lib/buildtool
parent7dbc5e03f1ced0e3a67e42e0f182579865d26af7 (diff)
Improve artifact->owner label accounting in two ways. First, don't do the full mapping unless requested. This gets rid of any performance issue for the vast majority of builds. Second, if requested, use a custom data structure so that we don't have to create a full HashSet for artifacts whose only owning labels are their own owner labels.
PiperOrigin-RevId: 206610370
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildtool')
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 44a5fd7aab..9a3102376f 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -18,15 +18,14 @@ import static com.google.common.collect.ImmutableSet.toImmutableSet;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Stopwatch;
+import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.SetMultimap;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionCacheChecker;
import com.google.devtools.build.lib.actions.ActionGraph;
import com.google.devtools.build.lib.actions.ActionInputPrefetcher;
-import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
import com.google.devtools.build.lib.actions.BuildFailedException;
import com.google.devtools.build.lib.actions.ExecException;
@@ -49,7 +48,6 @@ import com.google.devtools.build.lib.analysis.actions.SymlinkTreeActionContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.buildtool.buildevent.ExecutionPhaseCompleteEvent;
import com.google.devtools.build.lib.buildtool.buildevent.ExecutionStartingEvent;
-import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
@@ -311,16 +309,17 @@ public class ExecutionTool {
}
boolean buildCompleted = false;
try {
- SetMultimap<Artifact, Label> topLevelArtifactsToOwnerLabels =
- TopLevelArtifactHelper.makeTopLevelArtifactsToOwnerLabels(analysisResult, aspects);
for (ActionContextProvider actionContextProvider : actionContextProviders) {
try (SilentCloseable c =
Profiler.instance().profile(actionContextProvider + ".executionPhaseStarting")) {
- actionContextProvider.executionPhaseStarting(actionGraph, topLevelArtifactsToOwnerLabels);
+ actionContextProvider.executionPhaseStarting(
+ actionGraph,
+ Suppliers.memoize(
+ () ->
+ TopLevelArtifactHelper.makeTopLevelArtifactsToOwnerLabels(
+ analysisResult, aspects)));
}
}
- // Don't retain memory.
- topLevelArtifactsToOwnerLabels = null;
executor.executionPhaseStarting();
skyframeExecutor.drainChangedFiles();
@@ -341,7 +340,7 @@ public class ExecutionTool {
builder.buildArtifacts(
env.getReporter(),
- analysisResult.getTopLevelArtifactsToOwnerLabels().keySet(),
+ analysisResult.getTopLevelArtifactsToOwnerLabels().getArtifacts(),
analysisResult.getParallelTests(),
analysisResult.getExclusiveTests(),
analysisResult.getTargetsToBuild(),