Rework LoadingPhaseCompleteEvent & AnalysisPhaseCompleteEvent to account for the fact that loading and analysis is now interleaved.
RELNOTES: None
PiperOrigin-RevId: 162388460
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java
index 35b2d7f..063c571 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java
@@ -14,6 +14,8 @@
package com.google.devtools.build.lib.analysis;
+import static com.google.devtools.build.lib.pkgcache.PackageManager.PackageManagerStatistics;
+
import com.google.common.collect.ImmutableList;
import java.util.Collection;
@@ -26,16 +28,18 @@
private final Collection<ConfiguredTarget> topLevelTargets;
private final long timeInMs;
private int targetsVisited;
+ private final PackageManagerStatistics pkgManagerStats;
/**
* Construct the event.
* @param topLevelTargets The set of active topLevelTargets that remain.
*/
public AnalysisPhaseCompleteEvent(Collection<? extends ConfiguredTarget> topLevelTargets,
- int targetsVisited, long timeInMs) {
+ int targetsVisited, long timeInMs, PackageManagerStatistics pkgManagerStats) {
this.timeInMs = timeInMs;
this.topLevelTargets = ImmutableList.copyOf(topLevelTargets);
this.targetsVisited = targetsVisited;
+ this.pkgManagerStats = pkgManagerStats;
}
/**
@@ -56,4 +60,11 @@
public long getTimeInMs() {
return timeInMs;
}
+
+ /**
+ * Returns package manager statistics.
+ */
+ public PackageManagerStatistics getPkgManagerStats() {
+ return pkgManagerStats;
+ }
}
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 3ea2321..5d88451 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
@@ -72,6 +72,7 @@
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.pkgcache.LoadingResult;
+import com.google.devtools.build.lib.pkgcache.PackageManager.PackageManagerStatistics;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory.CoverageReportActionsWrapper;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
@@ -285,6 +286,10 @@
return skyframeBuildView.getEvaluatedTargetKeys().size();
}
+ public PackageManagerStatistics getAndClearPkgManagerStatistics() {
+ return skyframeExecutor.getPackageManager().getAndClearStatistics();
+ }
+
public BuildView(BlazeDirectories directories,
ConfiguredRuleClassProvider ruleClassProvider,
SkyframeExecutor skyframeExecutor,
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
index c825ccf..f9bab78 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
@@ -561,7 +561,8 @@
// TODO(bazel-team): Merge these into one event.
env.getEventBus().post(new AnalysisPhaseCompleteEvent(analysisResult.getTargetsToBuild(),
- view.getTargetsVisited(), timer.stop().elapsed(TimeUnit.MILLISECONDS)));
+ view.getTargetsVisited(), timer.stop().elapsed(TimeUnit.MILLISECONDS),
+ view.getAndClearPkgManagerStatistics()));
env.getEventBus().post(new TestFilteringCompleteEvent(analysisResult.getTargetsToBuild(),
analysisResult.getTargetsToTest()));
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
index 4cfc4fa..e83115b 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
@@ -72,7 +72,7 @@
}
/**
- * Returns the PackageCache statistics.
+ * Returns package manager statistics.
*/
public PackageManager.PackageManagerStatistics getPkgManagerStats() {
return pkgManagerStats;
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java
index e1615cd..d38e16e 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java
@@ -22,7 +22,7 @@
* related functionality: Recursive package finding, loaded package checking, etc.
*/
public interface PackageManager extends PackageProvider, CachingPackageLocator {
- PackageManagerStatistics getStatistics();
+ PackageManagerStatistics getAndClearStatistics();
/**
* Dump the contents of the package manager in human-readable form.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
index c6d34b0..90b24bd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
@@ -217,7 +217,7 @@
new LoadingPhaseCompleteEvent(
patternParsingValue.getTargets(),
patternParsingValue.getTestSuiteTargets(),
- packageManager.getStatistics(),
+ packageManager.getAndClearStatistics(),
testSuiteTime));
LOG.info("Target pattern evaluation finished");
return patternParsingValue.toLoadingResult();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 463e3f3..e1239e1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -103,6 +103,7 @@
import com.google.devtools.build.lib.pkgcache.LoadingResult;
import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
import com.google.devtools.build.lib.pkgcache.PackageManager;
+import com.google.devtools.build.lib.pkgcache.PackageManager.PackageManagerStatistics;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent;
import com.google.devtools.build.lib.pkgcache.TestFilter;
@@ -2096,7 +2097,7 @@
}
eventHandler.post(new LoadingPhaseCompleteEvent(
patternParsingValue.getTargets(), patternParsingValue.getTestSuiteTargets(),
- packageManager.getStatistics(), /*timeInMs=*/0));
+ PackageManagerStatistics.ZERO, /*timeInMs=*/0));
return patternParsingValue.toLoadingResult();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
index 1985387..87675c5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
@@ -79,11 +79,12 @@
}
@Override
- public PackageManagerStatistics getStatistics() {
+ public PackageManagerStatistics getAndClearStatistics() {
+ int packagesLoaded = numPackagesLoaded.getAndSet(0);
return new PackageManagerStatistics() {
@Override
public int getPackagesLoaded() {
- return numPackagesLoaded.get();
+ return packagesLoaded;
}
};
}