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;
       }
     };
   }