diff options
author | 2016-07-27 23:16:58 +0000 | |
---|---|---|
committer | 2016-07-28 18:36:30 -0400 | |
commit | a03258d231748109f645b2ae29efdce95a982268 (patch) | |
tree | e630778c4db6913c2d5ca74ba0e8dcd42b03dc21 /src/main/java/com/google/devtools | |
parent | 94c86135d05a1844263c59f3ce6b1c1917e0f4c8 (diff) |
Avoid copying map when adding discovered inputs to action metadata.
--
MOS_MIGRATED_REVID=128641967
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java index 0717561c47..ed23bdcfc8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java @@ -369,12 +369,10 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver // during execution. if (state.discoveredInputs != null && !state.inputArtifactData.keySet().containsAll(state.discoveredInputs)) { - Map<Artifact, FileArtifactValue> inputArtifactData = - addDiscoveredInputs(state.inputArtifactData, state.discoveredInputs, env); + addDiscoveredInputs(state.inputArtifactData, state.discoveredInputs, env); if (env.valuesMissing()) { return null; } - state.inputArtifactData = inputArtifactData; perActionFileCache = new PerActionFileCache(state.inputArtifactData); metadataHandler = new ActionMetadataHandler(state.inputArtifactData, action.getOutputs(), tsgm.get()); @@ -453,15 +451,12 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver return state.value; } - private static Map<Artifact, FileArtifactValue> addDiscoveredInputs( - Map<Artifact, FileArtifactValue> originalInputData, Collection<Artifact> discoveredInputs, + private static void addDiscoveredInputs( + Map<Artifact, FileArtifactValue> inputData, Collection<Artifact> discoveredInputs, Environment env) { - // We assume nobody would want to discover a TreeArtifact, since TreeArtifacts are precisely - // for undiscoverable contents. - Map<Artifact, FileArtifactValue> result = new HashMap<>(originalInputData); Set<SkyKey> keys = new HashSet<>(); for (Artifact artifact : discoveredInputs) { - if (!result.containsKey(artifact)) { + if (!inputData.containsKey(artifact)) { // Note that if the artifact is derived, the mandatory flag is ignored. keys.add(ArtifactValue.key(artifact, /*mandatory=*/false)); } @@ -474,11 +469,9 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver // discovery. // Therefore there is no need to catch and rethrow exceptions as there is with #checkInputs. Map<SkyKey, SkyValue> data = env.getValues(keys); - if (env.valuesMissing()) { - return null; + if (!env.valuesMissing()) { + inputData.putAll(transformArtifactMetadata(data)); } - result.putAll(transformArtifactMetadata(data)); - return result; } private void establishSkyframeDependencies(Environment env, Action action) @@ -615,9 +608,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver throw new ActionExecutionException(missingCount + " input file(s) do not exist", action, rootCauses.build(), /*catastrophe=*/false); } - return Pair.of( - Collections.unmodifiableMap(inputArtifactData), - Collections.unmodifiableMap(expandedArtifacts)); + return Pair.of(inputArtifactData, Collections.unmodifiableMap(expandedArtifacts)); } /** @@ -694,6 +685,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver */ private static class ContinuationState { AllInputs allInputs; + /** Mutable map containing metadata for known artifacts. */ Map<Artifact, FileArtifactValue> inputArtifactData = null; Map<Artifact, Collection<Artifact>> expandedArtifacts = null; Token token = null; |