diff options
author | janakr <janakr@google.com> | 2018-01-24 10:42:19 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-24 10:44:20 -0800 |
commit | 667e85dcc749adcd8003e64a56d45b22dfbf4856 (patch) | |
tree | b8420123aed2e4c875defa882483b3385e12cac6 /src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java | |
parent | 269d9bd849938af49a30950522bec9e1140cf599 (diff) |
Store a SkyKey inside BuildInfoCollectionValue.KeyAndConfig instead of a BuildConfiguration: BuildConfigurations are too heavy to be in SkyKeys.
This adds an extra dependency for BuildInfoCollectionValues, but there are not many in the graph, and the dep request is now batched, which is better than before.
PiperOrigin-RevId: 183106788
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java index b8cbd4a6f7..e8230a6b15 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactFactory; @@ -30,6 +31,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; +import java.util.Map; /** * Creates a {@link BuildInfoCollectionValue}. Only depends on the unique @@ -57,15 +59,18 @@ public class BuildInfoCollectionFunction implements SkyFunction { @Override public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException { final BuildInfoKeyAndConfig keyAndConfig = (BuildInfoKeyAndConfig) skyKey.argument(); - WorkspaceStatusValue infoArtifactValue = - (WorkspaceStatusValue) env.getValue(WorkspaceStatusValue.BUILD_INFO_KEY); - if (infoArtifactValue == null) { - return null; - } - WorkspaceNameValue nameValue = (WorkspaceNameValue) env.getValue(WorkspaceNameValue.key()); - if (nameValue == null) { + ImmutableSet<SkyKey> keysToRequest = + ImmutableSet.of( + WorkspaceStatusValue.BUILD_INFO_KEY, + WorkspaceNameValue.key(), + keyAndConfig.getConfigKey()); + Map<SkyKey, SkyValue> result = env.getValues(keysToRequest); + if (env.valuesMissing()) { return null; } + WorkspaceStatusValue infoArtifactValue = + (WorkspaceStatusValue) result.get(WorkspaceStatusValue.BUILD_INFO_KEY); + WorkspaceNameValue nameValue = (WorkspaceNameValue) result.get(WorkspaceNameValue.key()); RepositoryName repositoryName = RepositoryName.createFromValidStrippedName( nameValue.getName()); @@ -87,7 +92,8 @@ public class BuildInfoCollectionFunction implements SkyFunction { .get(keyAndConfig.getInfoKey()) .create( context, - keyAndConfig.getConfig(), + ((BuildConfigurationValue) result.get(keyAndConfig.getConfigKey())) + .getConfiguration(), infoArtifactValue.getStableArtifact(), infoArtifactValue.getVolatileArtifact(), repositoryName), |