aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
index 82a8f6bdb0..60af800cdf 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.actions.ActionGraph;
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionInputFileCache;
import com.google.devtools.build.lib.actions.ActionInputPrefetcher;
+import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionLogBufferPathGenerator;
import com.google.devtools.build.lib.actions.ActionLookupData;
import com.google.devtools.build.lib.actions.ActionLookupValue;
@@ -113,6 +114,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
// more detail.
private static final Striped<Lock> outputDirectoryDeletionLock = Striped.lock(64);
+ private final ActionKeyContext actionKeyContext;
private Reporter reporter;
private final AtomicReference<EventBus> eventBus;
private Map<String, String> clientEnv = ImmutableMap.of();
@@ -154,8 +156,10 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
private OutputService outputService;
SkyframeActionExecutor(
+ ActionKeyContext actionKeyContext,
AtomicReference<EventBus> eventBus,
AtomicReference<ActionExecutionStatusReporter> statusReporterRef) {
+ this.actionKeyContext = actionKeyContext;
this.eventBus = eventBus;
this.statusReporterRef = statusReporterRef;
}
@@ -235,7 +239,8 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
ConcurrentMap<ActionAnalysisMetadata, ConflictException> temporaryBadActionMap =
new ConcurrentHashMap<>();
Pair<ActionGraph, SortedMap<PathFragment, Artifact>> result;
- result = constructActionGraphAndPathMap(actionLookupValues, temporaryBadActionMap);
+ result =
+ constructActionGraphAndPathMap(actionKeyContext, actionLookupValues, temporaryBadActionMap);
ActionGraph actionGraph = result.first;
SortedMap<PathFragment, Artifact> artifactPathMap = result.second;
@@ -251,16 +256,17 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
}
/**
- * Simultaneously construct an action graph for all the actions in Skyframe and a map from
- * {@link PathFragment}s to their respective {@link Artifact}s. We do this in a threadpool to save
- * around 1.5 seconds on a mid-sized build versus a single-threaded operation.
+ * Simultaneously construct an action graph for all the actions in Skyframe and a map from {@link
+ * PathFragment}s to their respective {@link Artifact}s. We do this in a threadpool to save around
+ * 1.5 seconds on a mid-sized build versus a single-threaded operation.
*/
private static Pair<ActionGraph, SortedMap<PathFragment, Artifact>>
constructActionGraphAndPathMap(
+ ActionKeyContext actionKeyContext,
Iterable<ActionLookupValue> values,
ConcurrentMap<ActionAnalysisMetadata, ConflictException> badActionMap)
- throws InterruptedException {
- MutableActionGraph actionGraph = new MapBasedActionGraph();
+ throws InterruptedException {
+ MutableActionGraph actionGraph = new MapBasedActionGraph(actionKeyContext);
ConcurrentNavigableMap<PathFragment, Artifact> artifactPathMap = new ConcurrentSkipListMap<>();
// Action graph construction is CPU-bound.
int numJobs = Runtime.getRuntime().availableProcessors();
@@ -309,8 +315,8 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
actionGraph.registerAction(action);
} catch (ActionConflictException e) {
Exception oldException = badActionMap.put(action, new ConflictException(e));
- Preconditions.checkState(oldException == null,
- "%s | %s | %s", action, e, oldException);
+ Preconditions.checkState(
+ oldException == null, "%s | %s | %s", action, e, oldException);
// We skip the rest of the loop, and do not add the path->artifact mapping for this
// artifact below -- we don't need to check it since this action is already in
// error.
@@ -468,6 +474,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
executorEngine,
new DelegatingPairFileCache(graphFileCache, perBuildFileCache),
actionInputPrefetcher,
+ actionKeyContext,
metadataHandler,
fileOutErr,
clientEnv,
@@ -577,6 +584,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
executorEngine,
new DelegatingPairFileCache(graphFileCache, perBuildFileCache),
actionInputPrefetcher,
+ actionKeyContext,
metadataHandler,
actionLogBufferPathGenerator.generate(),
clientEnv,