diff options
author | 2016-07-15 22:23:37 +0000 | |
---|---|---|
committer | 2016-07-18 10:44:37 +0000 | |
commit | bfd4e2461556a67502c80c84c0228b8c91955623 (patch) | |
tree | 554c56e1e90f9c6b93bdec7a3b10ec5629c7693f /src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java | |
parent | a66a56b108c04f05efcb9b965361d692435acc59 (diff) |
Model the TopLevelArtifactContext as an argument to the CompletionFunction rather than a PRECOMPUTED value.
Having a stale TopLevelArtifactContext leads to invalidation of all the top level target nodes, causing time wasted due to a lot of cache hits for a null build.
--
MOS_MIGRATED_REVID=127585059
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java index b5321a801f..01f5698eb0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java @@ -13,10 +13,12 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; +import com.google.auto.value.AutoValue; import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.LabelAndConfiguration; +import com.google.devtools.build.lib.analysis.TopLevelArtifactContext; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -31,12 +33,18 @@ public class TestCompletionValue implements SkyValue { private TestCompletionValue() { } - public static SkyKey key(LabelAndConfiguration lac, boolean exclusive) { - return SkyKey.create(SkyFunctions.TEST_COMPLETION, new TestCompletionKey(lac, exclusive)); + public static SkyKey key( + LabelAndConfiguration lac, + final TopLevelArtifactContext topLevelArtifactContext, + final boolean exclusiveTesting) { + return SkyKey.create( + SkyFunctions.TEST_COMPLETION, + TestCompletionKey.create(lac, topLevelArtifactContext, exclusiveTesting)); } public static Iterable<SkyKey> keys(Collection<ConfiguredTarget> targets, - final boolean exclusive) { + final TopLevelArtifactContext topLevelArtifactContext, + final boolean exclusiveTesting) { return Iterables.transform( targets, new Function<ConfiguredTarget, SkyKey>() { @@ -44,26 +52,25 @@ public class TestCompletionValue implements SkyValue { public SkyKey apply(ConfiguredTarget ct) { return SkyKey.create( SkyFunctions.TEST_COMPLETION, - new TestCompletionKey(LabelAndConfiguration.of(ct), exclusive)); + TestCompletionKey.create( + LabelAndConfiguration.of(ct), topLevelArtifactContext, exclusiveTesting)); } }); } - - static class TestCompletionKey { - private final LabelAndConfiguration lac; - private final boolean exclusiveTesting; - TestCompletionKey(LabelAndConfiguration lac, boolean exclusive) { - this.lac = lac; - this.exclusiveTesting = exclusive; - } + @AutoValue + abstract static class TestCompletionKey { - public LabelAndConfiguration getLabelAndConfiguration() { - return lac; + public static TestCompletionKey create( + LabelAndConfiguration labelAndConfiguration, + TopLevelArtifactContext topLevelArtifactContext, + boolean exclusiveTesting) { + return new AutoValue_TestCompletionValue_TestCompletionKey( + labelAndConfiguration, topLevelArtifactContext, exclusiveTesting); } - public boolean isExclusiveTesting() { - return exclusiveTesting; - } + public abstract LabelAndConfiguration labelAndConfiguration(); + public abstract TopLevelArtifactContext topLevelArtifactContext(); + public abstract boolean exclusiveTesting(); } } |