aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-01-24 10:42:19 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-24 10:44:20 -0800
commit667e85dcc749adcd8003e64a56d45b22dfbf4856 (patch)
treeb8420123aed2e4c875defa882483b3385e12cac6 /src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
parent269d9bd849938af49a30950522bec9e1140cf599 (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.java22
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),