From 519b5fde353537a1d582fc906b1fe7690f987f0e Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Tue, 11 Mar 2025 16:37:54 +0100 Subject: [PATCH] [7.6.0] Performance improvements for builds with many top-level targets (#25492) * https://github.com/bazelbuild/bazel/commit/3e115b937d7f6eff5c819667c6f6226c8fdba466 * https://github.com/bazelbuild/bazel/commit/e12fdd93a3e22163d37209634ad5546f9fccd3bf --------- Co-authored-by: Googler --- .../build/lib/analysis/BuildView.java | 36 ++++++++++++------- .../build/lib/skyframe/SkyframeExecutor.java | 11 +++--- 2 files changed, 29 insertions(+), 18 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 98e0cbb97b0bc5..026d3def8a4021 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 @@ -13,10 +13,11 @@ // limitations under the License. package com.google.devtools.build.lib.analysis; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.ImmutableList.toImmutableList; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -63,6 +64,7 @@ import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.NoSuchTargetException; +import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.StarlarkAspectClass; import com.google.devtools.build.lib.packages.Target; @@ -166,7 +168,7 @@ public BuildView( this.directories = directories; this.coverageReportActionFactory = coverageReportActionFactory; this.ruleClassProvider = ruleClassProvider; - this.skyframeExecutor = Preconditions.checkNotNull(skyframeExecutor); + this.skyframeExecutor = checkNotNull(skyframeExecutor); this.skyframeBuildView = skyframeExecutor.getSkyframeBuildView(); } @@ -232,13 +234,7 @@ public AnalysisResult update( skyframeBuildView.resetProgressReceiver(); skyframeExecutor.setBaselineConfiguration(targetOptions); - ImmutableMap.Builder labelToTargetsMapBuilder = - ImmutableMap.builderWithExpectedSize(loadingResult.getTargetLabels().size()); - loadingResult - .getTargets(eventHandler, skyframeExecutor.getPackageManager()) - .forEach(target -> labelToTargetsMapBuilder.put(target.getLabel(), target)); - ImmutableMap labelToTargetMap = labelToTargetsMapBuilder.buildOrThrow(); - + ImmutableMap labelToTargetMap = constructLabelToTargetMap(loadingResult); eventBus.post(new AnalysisPhaseStartedEvent(labelToTargetMap.values())); // Prepare the analysis phase @@ -291,7 +287,7 @@ public AnalysisResult update( (RuleContextConstraintSemantics) ruleClassProvider.getConstraintSemantics()); // We wait until now to setup for execution, in case the artifact factory was reset // due to a config change. - Preconditions.checkNotNull(executionSetupCallback).prepareForExecution(); + checkNotNull(executionSetupCallback).prepareForExecution(); skyframeAnalysisResult = skyframeBuildView.analyzeAndExecuteTargets( eventHandler, @@ -303,8 +299,8 @@ public AnalysisResult update( explicitTargetPatterns, eventBus, bugReporter, - Preconditions.checkNotNull(resourceManager), // non-null for skymeld. - Preconditions.checkNotNull(buildResultListener), // non-null for skymeld. + checkNotNull(resourceManager), // non-null for skymeld. + checkNotNull(buildResultListener), // non-null for skymeld. (configuredTargets, allTargetsToTest) -> memoizedGetCoverageArtifactsHelper( configuredTargets, allTargetsToTest, eventHandler, eventBus, loadingResult), @@ -414,6 +410,20 @@ public AnalysisResult update( return result; } + private ImmutableMap constructLabelToTargetMap( + TargetPatternPhaseValue loadingResult) throws InterruptedException { + ImmutableSet