diff options
author | 2015-09-26 09:51:39 +0000 | |
---|---|---|
committer | 2015-09-28 11:39:52 +0000 | |
commit | 003fe96262be45e600ccba6c687dc6b770f734cf (patch) | |
tree | fade1996bbfd70739c2045abb50595e741d29fe5 /src/main/java/com/google/devtools/build/lib | |
parent | 84863a90a026585c3a725e8b1f4d73338c54df6a (diff) |
Move the remaining state from BuildView to SkyframeBuildView.
--
MOS_MIGRATED_REVID=104009600
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/BuildView.java | 29 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java | 45 |
2 files changed, 47 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 05c8377bb1..08b5d6601a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -214,8 +214,6 @@ public class BuildView { // Same as skyframeExecutor.getPackageManager(). private final LoadedPackageProvider packageManager; - private BuildConfigurationCollection configurations; - private final ConfiguredRuleClassProvider ruleClassProvider; /** @@ -223,12 +221,6 @@ public class BuildView { */ @Nullable private final CoverageReportActionFactory coverageReportActionFactory; - /** - * If the last build was executed with {@code Options#discard_analysis_cache} and we are not - * running Skyframe full, we should clear the legacy data since it is out-of-sync. - */ - private boolean skyframeAnalysisWasDiscarded; - @VisibleForTesting public Set<SkyKey> getSkyframeEvaluatedTargetKeysForTesting() { return skyframeBuildView.getEvaluatedTargetKeys(); @@ -264,8 +256,7 @@ public class BuildView { */ @VisibleForTesting public void setConfigurationsForTesting(BuildConfigurationCollection configurations) { - this.configurations = configurations; - skyframeBuildView.setTopLevelHostConfiguration(configurations.getHostConfiguration()); + skyframeBuildView.setConfigurations(configurations); } public ArtifactFactory getArtifactFactory() { @@ -560,19 +551,7 @@ public class BuildView { Collection<Target> targets = loadingResult.getTargets(); eventBus.post(new AnalysisPhaseStartedEvent(targets)); - // Clear all cached ConfiguredTargets on configuration change. - // TODO(ulfjack): Can we remove this now? - // - // Also if --discard_analysis_cache was used in the last build we want to clear the legacy - // data. - if ((this.configurations != null && !configurations.equals(this.configurations)) - || skyframeAnalysisWasDiscarded) { - LOG.info("Discarding analysis cache: configurations have changed."); - skyframeExecutor.dropConfiguredTargets(); - } - skyframeAnalysisWasDiscarded = false; - this.configurations = configurations; - skyframeBuildView.setTopLevelHostConfiguration(this.configurations.getHostConfiguration()); + skyframeBuildView.setConfigurations(configurations); // Determine the configurations. List<TargetAndConfiguration> nodes = nodesForTargets(configurations, targets); @@ -1008,8 +987,6 @@ public class BuildView { * @see BuildView.Options#discardAnalysisCache */ public void clearAnalysisCache(Collection<ConfiguredTarget> topLevelTargets) { - // TODO(bazel-team): Consider clearing packages too to save more memory. - skyframeAnalysisWasDiscarded = true; - skyframeExecutor.clearAnalysisCache(topLevelTargets); + skyframeBuildView.clearAnalysisCache(topLevelTargets); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index de2d7338bc..22e272e9fe 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; @@ -35,6 +36,7 @@ import com.google.devtools.build.lib.analysis.AnalysisEnvironment; import com.google.devtools.build.lib.analysis.AnalysisFailureEvent; import com.google.devtools.build.lib.analysis.Aspect; import com.google.devtools.build.lib.analysis.BlazeDirectories; +import com.google.devtools.build.lib.analysis.BuildView; import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment; import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; @@ -47,6 +49,7 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey; import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -77,6 +80,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.Logger; import javax.annotation.Nullable; @@ -86,6 +90,7 @@ import javax.annotation.Nullable; * <p>Covers enough functionality to work as a substitute for {@code BuildView#configureTargets}. */ public final class SkyframeBuildView { + private static Logger LOG = Logger.getLogger(BuildView.class.getName()); private final ConfiguredTargetFactory factory; private final ArtifactFactory artifactFactory; @@ -116,6 +121,14 @@ public final class SkyframeBuildView { private Map<Set<Class<? extends BuildConfiguration.Fragment>>, BuildConfiguration> hostConfigurationCache = Maps.newConcurrentMap(); + private BuildConfigurationCollection configurations; + + /** + * If the last build was executed with {@code Options#discard_analysis_cache} and we are not + * running Skyframe full, we should clear the legacy data since it is out-of-sync. + */ + private boolean skyframeAnalysisWasDiscarded; + public SkyframeBuildView(BlazeDirectories directories, SkyframeExecutor skyframeExecutor, BinTools binTools, ConfiguredRuleClassProvider ruleClassProvider) { @@ -135,13 +148,31 @@ public final class SkyframeBuildView { } /** + * Sets the configurations. Not thread-safe. DO NOT CALL except from tests! + */ + @VisibleForTesting + public void setConfigurations(BuildConfigurationCollection configurations) { + // Clear all cached ConfiguredTargets on configuration change of if --discard_analysis_cache + // was set on the previous build. In the former case, it's not required for correctness, but + // prevents unbounded memory usage. + if ((this.configurations != null && !configurations.equals(this.configurations)) + || skyframeAnalysisWasDiscarded) { + LOG.info("Discarding analysis cache: configurations have changed."); + skyframeExecutor.dropConfiguredTargets(); + } + skyframeAnalysisWasDiscarded = false; + this.configurations = configurations; + setTopLevelHostConfiguration(configurations.getHostConfiguration()); + } + + /** * Sets the host configuration consisting of all fragments that will be used by the top level * targets' transitive closures. * * <p>This is used to power {@link #getHostConfiguration} during analysis, which computes * fragment-trimmed host configurations from the top-level one. */ - public void setTopLevelHostConfiguration(BuildConfiguration topLevelHostConfiguration) { + private void setTopLevelHostConfiguration(BuildConfiguration topLevelHostConfiguration) { if (topLevelHostConfiguration.equals(this.topLevelHostConfiguration)) { return; } @@ -149,6 +180,18 @@ public final class SkyframeBuildView { this.topLevelHostConfiguration = topLevelHostConfiguration; } + /** + * Drops the analysis cache. If building with Skyframe, targets in {@code topLevelTargets} may + * remain in the cache for use during the execution phase. + * + * @see com.google.devtools.build.lib.analysis.BuildView.Options#discardAnalysisCache + */ + public void clearAnalysisCache(Collection<ConfiguredTarget> topLevelTargets) { + // TODO(bazel-team): Consider clearing packages too to save more memory. + skyframeAnalysisWasDiscarded = true; + skyframeExecutor.clearAnalysisCache(topLevelTargets); + } + private void setDeserializedArtifactOwners() throws ViewCreationFailedException { Map<PathFragment, Artifact> deserializedArtifactMap = artifactFactory.getDeserializedArtifacts(); |