diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index 56dcf87..82bb2f9 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -25,7 +25,7 @@
 
 # Parse third_party/googleapis/BUILD.bazel to find the proto files we need to compile from googleapis
 GOOGLE_API_PROTOS="$(grep -o '".*\.proto"' third_party/googleapis/BUILD.bazel | sed 's/"//g' | sed 's|^|third_party/googleapis/|g')"
-PROTO_FILES=$(find third_party/remoteapis ${GOOGLE_API_PROTOS} third_party/pprof src/main/protobuf src/main/java/com/google/devtools/build/lib/buildeventstream/proto src/main/java/com/google/devtools/build/skyframe src/main/java/com/google/devtools/build/lib/skyframe/proto src/main/java/com/google/devtools/build/lib/bazel/debug src/main/java/com/google/devtools/build/lib/starlarkdebug/proto src/main/java/com/google/devtools/build/lib/packages/metrics/package_load_metrics.proto -name "*.proto")
+PROTO_FILES=$(find third_party/remoteapis ${GOOGLE_API_PROTOS} third_party/pprof src/main/protobuf src/main/java/com/google/devtools/build/lib/buildeventstream/proto src/main/java/com/google/devtools/build/skyframe src/main/java/com/google/devtools/build/lib/skyframe/proto src/main/java/com/google/devtools/build/lib/bazel/debug src/main/java/com/google/devtools/build/lib/starlarkdebug/proto src/main/java/com/google/devtools/build/lib/packages/metrics/package_metrics.proto -name "*.proto")
 # For protobuf jars, derived/jars/com_google_protobuf/java/core/libcore.jar must be in front of derived/jars/com_google_protobuf/java/core/liblite.jar, so we sort jars here
 LIBRARY_JARS=$(find $ADDITIONAL_JARS -name '*.jar' | sort | grep -Fv JavaBuilder | tr "\n" " ")
 MAVEN_JARS=$(find maven -name '*.jar' | grep -Fv netty-tcnative | tr "\n" " ")
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD
index d30768b..313dccb 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD
@@ -26,7 +26,6 @@
     name = "build_event_stream_proto",
     srcs = ["build_event_stream.proto"],
     deps = [
-        "//src/main/java/com/google/devtools/build/lib/packages/metrics:package_load_metrics_proto",
         "//src/main/protobuf:command_line_proto",
         "//src/main/protobuf:failure_details_proto",
         "//src/main/protobuf:invocation_policy_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
index 8613d33..18fd701 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
@@ -18,7 +18,6 @@
 
 import "google/protobuf/duration.proto";
 import "google/protobuf/timestamp.proto";
-import "src/main/java/com/google/devtools/build/lib/packages/metrics/package_load_metrics.proto";
 import "src/main/protobuf/command_line.proto";
 import "src/main/protobuf/failure_details.proto";
 import "src/main/protobuf/invocation_policy.proto";
@@ -940,10 +939,6 @@
     // After Feb 2022, this value is the number of packages successfully
     // loaded.
     int64 packages_loaded = 1;
-
-    // Loading time metrics per package.
-    repeated devtools.build.lib.packages.metrics.PackageLoadMetrics
-        package_load_metrics = 2;
   }
   PackageMetrics package_metrics = 4;
 
diff --git a/src/main/java/com/google/devtools/build/lib/metrics/BUILD b/src/main/java/com/google/devtools/build/lib/metrics/BUILD
index eaf5f48..fba1ce6 100644
--- a/src/main/java/com/google/devtools/build/lib/metrics/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/metrics/BUILD
@@ -44,8 +44,6 @@
         "//src/main/java/com/google/devtools/build/lib/bugreport",
         "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
         "//src/main/java/com/google/devtools/build/lib/clock",
-        "//src/main/java/com/google/devtools/build/lib/packages/metrics",
-        "//src/main/java/com/google/devtools/build/lib/packages/metrics:package_load_metrics_java_proto",
         "//src/main/java/com/google/devtools/build/lib/profiler",
         "//src/main/java/com/google/devtools/build/lib/profiler:network_metrics_collector",
         "//src/main/java/com/google/devtools/build/lib/skyframe:execution_finished_event",
diff --git a/src/main/java/com/google/devtools/build/lib/metrics/MetricsCollector.java b/src/main/java/com/google/devtools/build/lib/metrics/MetricsCollector.java
index e8d32e7..21a4b72 100644
--- a/src/main/java/com/google/devtools/build/lib/metrics/MetricsCollector.java
+++ b/src/main/java/com/google/devtools/build/lib/metrics/MetricsCollector.java
@@ -44,9 +44,6 @@
 import com.google.devtools.build.lib.clock.BlazeClock.NanosToMillisSinceEpochConverter;
 import com.google.devtools.build.lib.metrics.MetricsModule.Options;
 import com.google.devtools.build.lib.metrics.PostGCMemoryUseRecorder.PeakHeap;
-import com.google.devtools.build.lib.packages.metrics.PackageLoadMetrics;
-import com.google.devtools.build.lib.packages.metrics.PackageMetricsPackageLoadingListener;
-import com.google.devtools.build.lib.packages.metrics.PackageMetricsRecorder;
 import com.google.devtools.build.lib.profiler.MemoryProfiler;
 import com.google.devtools.build.lib.profiler.NetworkMetricsCollector;
 import com.google.devtools.build.lib.profiler.Profiler;
@@ -113,10 +110,6 @@
     numAnalyses.getAndIncrement();
   }
 
-  // For each of the 4 metrics allow only 10 entries to be printed when handling
-  // extremes.
-  private static final int MAX_EXTREME_PACKAGE_STATS = 4 * 10;
-
   @SuppressWarnings("unused")
   @Subscribe
   public void onAnalysisPhaseComplete(AnalysisPhaseCompleteEvent event) {
@@ -128,22 +121,8 @@
     targetMetrics
         .setTargetsConfigured(targetsConfigured.total())
         .setTargetsConfiguredNotIncludingAspects(targetsConfigured.configuredTargetsOnly());
-    timingMetrics.setAnalysisPhaseTimeInMs(event.getTimeInMs());
-
     packageMetrics.setPackagesLoaded(event.getPkgManagerStats().getPackagesSuccessfullyLoaded());
-
-    if (PackageMetricsPackageLoadingListener.getInstance().getPublishPackageMetricsInBep()) {
-      PackageMetricsRecorder recorder =
-          PackageMetricsPackageLoadingListener.getInstance().getPackageMetricsRecorder();
-      if (recorder != null) {
-        Stream<PackageLoadMetrics> metrics =
-            recorder.getRecorderType() == PackageMetricsRecorder.Type.ONLY_EXTREMES
-                ? recorder.getPackageLoadMetrics().stream().limit(MAX_EXTREME_PACKAGE_STATS)
-                : recorder.getPackageLoadMetrics().stream();
-
-        metrics.forEach(packageMetrics::addPackageLoadMetrics);
-      }
-    }
+    timingMetrics.setAnalysisPhaseTimeInMs(event.getTimeInMs());
   }
 
   @SuppressWarnings("unused")
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD b/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
index 4c481ab..4bbc6f1 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
@@ -16,7 +16,7 @@
     name = "metrics",
     srcs = glob(["*.java"]),
     deps = [
-        ":package_load_metrics_java_proto",
+        ":package_metrics_java_proto",
         "//src/main/java/com/google/devtools/build/lib:runtime",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
@@ -35,26 +35,26 @@
 )
 
 proto_library(
-    name = "package_load_metrics_proto",
-    srcs = ["package_load_metrics.proto"],
+    name = "package_metrics_proto",
+    srcs = ["package_metrics.proto"],
     deps = [
         "@com_google_protobuf//:duration_proto",
     ],
 )
 
 java_proto_library(
-    name = "package_load_metrics_java_proto",
+    name = "package_metrics_java_proto",
     deps = [
-        ":package_load_metrics_proto",
+        ":package_metrics_proto",
     ],
 )
 
 java_library_srcs(
-    name = "package_load_metrics_java_proto_srcs",
-    deps = [":package_load_metrics_java_proto"],
+    name = "package_metrics_java_proto_srcs",
+    deps = [":package_metrics_java_proto"],
 )
 
 filegroup(
     name = "dist_jars",
-    srcs = [":package_load_metrics_java_proto_srcs"],
+    srcs = [":package_metrics_java_proto_srcs"],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/CompletePackageMetricsRecorder.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/CompletePackageMetricsRecorder.java
index 2b29d4e..9a2222d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/CompletePackageMetricsRecorder.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/CompletePackageMetricsRecorder.java
@@ -27,40 +27,40 @@
 final class CompletePackageMetricsRecorder implements PackageMetricsRecorder {
 
   @GuardedBy("this")
-  private final HashMap<PackageIdentifier, PackageLoadMetrics> metrics = new HashMap<>();
+  private final HashMap<PackageIdentifier, PackageMetrics> metrics = new HashMap<>();
 
   CompletePackageMetricsRecorder() {}
 
   @Override
-  public synchronized void recordMetrics(PackageIdentifier pkgId, PackageLoadMetrics metrics) {
+  public synchronized void recordMetrics(PackageIdentifier pkgId, PackageMetrics metrics) {
     this.metrics.put(pkgId, metrics);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Duration> getLoadTimes() {
-    return Maps.transformValues(metrics, PackageLoadMetrics::getLoadDuration);
+    return Maps.transformValues(metrics, PackageMetrics::getLoadDuration);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getComputationSteps() {
-    return Maps.transformValues(metrics, PackageLoadMetrics::getComputationSteps);
+    return Maps.transformValues(metrics, PackageMetrics::getComputationSteps);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getNumTargets() {
-    return Maps.transformValues(metrics, PackageLoadMetrics::getNumTargets);
+    return Maps.transformValues(metrics, PackageMetrics::getNumTargets);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getNumTransitiveLoads() {
-    return Maps.transformValues(metrics, PackageLoadMetrics::getNumTransitiveLoads);
+    return Maps.transformValues(metrics, PackageMetrics::getNumTransitiveLoads);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getPackageOverhead() {
     return Maps.transformValues(
-        Maps.filterValues(metrics, PackageLoadMetrics::hasPackageOverhead),
-        PackageLoadMetrics::getPackageOverhead);
+        Maps.filterValues(metrics, PackageMetrics::hasPackageOverhead),
+        PackageMetrics::getPackageOverhead);
   }
 
   @Override
@@ -79,7 +79,7 @@
   }
 
   @Override
-  public synchronized ImmutableCollection<PackageLoadMetrics> getPackageLoadMetrics() {
+  public synchronized ImmutableCollection<PackageMetrics> getPackageMetrics() {
     // lazily set the pkgName when requested.
     return metrics.entrySet().stream()
         .map(e -> e.getValue().toBuilder().setName(e.getKey().toString()).build())
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/ExtremaPackageMetricsRecorder.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/ExtremaPackageMetricsRecorder.java
index ca586d1..475344a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/ExtremaPackageMetricsRecorder.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/ExtremaPackageMetricsRecorder.java
@@ -38,33 +38,33 @@
   private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
 
   @GuardedBy("this")
-  private final Extrema<PackageLoadMetricsContainer> slowestPackagesToLoad;
+  private final Extrema<PackageMetricsContainer> slowestPackagesToLoad;
 
   @GuardedBy("this")
-  private final Extrema<PackageLoadMetricsContainer> largestPackages;
+  private final Extrema<PackageMetricsContainer> largestPackages;
 
   @GuardedBy("this")
-  private final Extrema<PackageLoadMetricsContainer> packagesWithMostTransitiveLoads;
+  private final Extrema<PackageMetricsContainer> packagesWithMostTransitiveLoads;
 
   @GuardedBy("this")
-  private final Extrema<PackageLoadMetricsContainer> packagesWithMostComputationSteps;
+  private final Extrema<PackageMetricsContainer> packagesWithMostComputationSteps;
 
   @GuardedBy("this")
-  private final Extrema<PackageLoadMetricsContainer> packagesWithMostOverhead;
+  private final Extrema<PackageMetricsContainer> packagesWithMostOverhead;
 
   ExtremaPackageMetricsRecorder(int currentNumPackagesToTrack) {
     Preconditions.checkArgument(currentNumPackagesToTrack >= 0, "num packages must be >= 0");
     this.currentNumPackagesToTrack = currentNumPackagesToTrack;
     this.slowestPackagesToLoad =
-        Extrema.max(currentNumPackagesToTrack, PackageLoadMetricsContainer.LOAD_TIMES_COMP);
+        Extrema.max(currentNumPackagesToTrack, PackageMetricsContainer.LOAD_TIMES_COMP);
     this.largestPackages =
-        Extrema.max(currentNumPackagesToTrack, PackageLoadMetricsContainer.NUM_TARGETS_COMP);
+        Extrema.max(currentNumPackagesToTrack, PackageMetricsContainer.NUM_TARGETS_COMP);
     this.packagesWithMostTransitiveLoads =
-        Extrema.max(currentNumPackagesToTrack, PackageLoadMetricsContainer.TRANSITIVE_LOADS_COMP);
+        Extrema.max(currentNumPackagesToTrack, PackageMetricsContainer.TRANSITIVE_LOADS_COMP);
     this.packagesWithMostComputationSteps =
-        Extrema.max(currentNumPackagesToTrack, PackageLoadMetricsContainer.COMPUTATION_STEPS_COMP);
+        Extrema.max(currentNumPackagesToTrack, PackageMetricsContainer.COMPUTATION_STEPS_COMP);
     this.packagesWithMostOverhead =
-        Extrema.max(currentNumPackagesToTrack, PackageLoadMetricsContainer.OVERHEAD_COMP);
+        Extrema.max(currentNumPackagesToTrack, PackageMetricsContainer.OVERHEAD_COMP);
   }
 
   public int getNumPackageToTrack() {
@@ -72,8 +72,8 @@
   }
 
   @Override
-  public synchronized void recordMetrics(PackageIdentifier pkgId, PackageLoadMetrics metrics) {
-    PackageLoadMetricsContainer cont = PackageLoadMetricsContainer.create(pkgId, metrics);
+  public synchronized void recordMetrics(PackageIdentifier pkgId, PackageMetrics metrics) {
+    PackageMetricsContainer cont = PackageMetricsContainer.create(pkgId, metrics);
     slowestPackagesToLoad.aggregate(cont);
     packagesWithMostComputationSteps.aggregate(cont);
     largestPackages.aggregate(cont);
@@ -88,40 +88,40 @@
     return slowestPackagesToLoad.getExtremeElements().stream()
         .collect(
             Collectors.toMap(
-                PackageLoadMetricsContainer::getPackageIdentifier,
-                v -> v.getPackageLoadMetricsInternal().getLoadDuration(),
+                PackageMetricsContainer::getPackageIdentifier,
+                v -> v.getPackageMetricsInternal().getLoadDuration(),
                 (k, v) -> v,
                 LinkedHashMap::new)); // use a LinkedHashMap to ensure iteration order is maintained
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getComputationSteps() {
-    return toMap(packagesWithMostComputationSteps, PackageLoadMetrics::getComputationSteps);
+    return toMap(packagesWithMostComputationSteps, PackageMetrics::getComputationSteps);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getNumTargets() {
-    return toMap(largestPackages, PackageLoadMetrics::getNumTargets);
+    return toMap(largestPackages, PackageMetrics::getNumTargets);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getNumTransitiveLoads() {
-    return toMap(packagesWithMostTransitiveLoads, PackageLoadMetrics::getNumTransitiveLoads);
+    return toMap(packagesWithMostTransitiveLoads, PackageMetrics::getNumTransitiveLoads);
   }
 
   @Override
   public synchronized Map<PackageIdentifier, Long> getPackageOverhead() {
-    return toMap(packagesWithMostOverhead, PackageLoadMetrics::getPackageOverhead);
+    return toMap(packagesWithMostOverhead, PackageMetrics::getPackageOverhead);
   }
 
   private synchronized Map<PackageIdentifier, Long> toMap(
-      Extrema<PackageLoadMetricsContainer> ext, Function<PackageLoadMetrics, Long> fn) {
+      Extrema<PackageMetricsContainer> ext, Function<PackageMetrics, Long> fn) {
 
     return ext.getExtremeElements().stream()
         .collect(
             Collectors.toMap(
-                PackageLoadMetricsContainer::getPackageIdentifier,
-                v -> fn.apply(v.getPackageLoadMetricsInternal()),
+                PackageMetricsContainer::getPackageIdentifier,
+                v -> fn.apply(v.getPackageMetricsInternal()),
                 (k, v) -> v,
                 LinkedHashMap::new)); // use a LinkedHashMap to ensure iteration order is maintained
   }
@@ -140,23 +140,23 @@
     logIfNonEmpty(
         "Slowest packages (ms)",
         slowestPackagesToLoad.getExtremeElements(),
-        c -> Durations.toMillis(c.getPackageLoadMetricsInternal().getLoadDuration()));
+        c -> Durations.toMillis(c.getPackageMetricsInternal().getLoadDuration()));
     logIfNonEmpty(
         "Largest packages (num targets)",
         largestPackages.getExtremeElements(),
-        c -> c.getPackageLoadMetricsInternal().getNumTargets());
+        c -> c.getPackageMetricsInternal().getNumTargets());
     logIfNonEmpty(
         "Packages with most computation steps",
         packagesWithMostComputationSteps.getExtremeElements(),
-        c -> c.getPackageLoadMetricsInternal().getComputationSteps());
+        c -> c.getPackageMetricsInternal().getComputationSteps());
     logIfNonEmpty(
         "Packages with most transitive loads (num bzl files)",
         packagesWithMostTransitiveLoads.getExtremeElements(),
-        c -> c.getPackageLoadMetricsInternal().getNumTransitiveLoads());
+        c -> c.getPackageMetricsInternal().getNumTransitiveLoads());
     logIfNonEmpty(
         "Packages with most overhead",
         packagesWithMostOverhead.getExtremeElements(),
-        c -> c.getPackageLoadMetricsInternal().getPackageOverhead());
+        c -> c.getPackageMetricsInternal().getPackageOverhead());
     clear();
   }
 
@@ -166,21 +166,21 @@
   }
 
   @Override
-  public synchronized Collection<PackageLoadMetrics> getPackageLoadMetrics() {
+  public synchronized Collection<PackageMetrics> getPackageMetrics() {
     return Streams.concat(
             slowestPackagesToLoad.getExtremeElements().stream(),
             packagesWithMostComputationSteps.getExtremeElements().stream(),
             largestPackages.getExtremeElements().stream(),
             packagesWithMostTransitiveLoads.getExtremeElements().stream(),
             packagesWithMostOverhead.getExtremeElements().stream())
-        .map(PackageLoadMetricsContainer::getPackageLoadMetrics)
+        .map(PackageMetricsContainer::getPackageMetrics)
         .collect(toImmutableSet());
   }
 
   private static void logIfNonEmpty(
       String logLinePrefix,
-      List<PackageLoadMetricsContainer> extremeElements,
-      Function<PackageLoadMetricsContainer, Long> valueMapper) {
+      List<PackageMetricsContainer> extremeElements,
+      Function<PackageMetricsContainer, Long> valueMapper) {
     List<String> logString =
         extremeElements.stream()
             .map(v -> String.format("%s (%d)", v.getPackageIdentifier(), valueMapper.apply(v)))
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageLoadMetricsContainer.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageLoadMetricsContainer.java
deleted file mode 100644
index 6ff0799..0000000
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageLoadMetricsContainer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.packages.metrics;
-
-import com.google.auto.value.AutoValue;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.protobuf.util.Durations;
-import java.util.Comparator;
-
-/** Container class holding a PackageIdentifier and PackageMetrics proto. */
-@AutoValue
-public abstract class PackageLoadMetricsContainer {
-
-  /** Sorts by LoadTime Duration. */
-  public static final Comparator<PackageLoadMetricsContainer> LOAD_TIMES_COMP =
-      Comparator.comparing(
-          c -> c.getPackageLoadMetricsInternal().getLoadDuration(), Durations.comparator());
-  /** Sorts by Num Target count . */
-  public static final Comparator<PackageLoadMetricsContainer> NUM_TARGETS_COMP =
-      Comparator.comparingLong(c -> c.getPackageLoadMetricsInternal().getNumTargets());
-  /** Sorts by Comutation Steps count. */
-  public static final Comparator<PackageLoadMetricsContainer> COMPUTATION_STEPS_COMP =
-      Comparator.comparingLong(c -> c.getPackageLoadMetricsInternal().getComputationSteps());
-  /** Sorts by Transitive Load Count. */
-  public static final Comparator<PackageLoadMetricsContainer> TRANSITIVE_LOADS_COMP =
-      Comparator.comparingLong(c -> c.getPackageLoadMetricsInternal().getNumTransitiveLoads());
-  /** Sorts by Package Overhead. */
-  public static final Comparator<PackageLoadMetricsContainer> OVERHEAD_COMP =
-      Comparator.comparingLong(c -> c.getPackageLoadMetricsInternal().getPackageOverhead());
-
-  public static PackageLoadMetricsContainer create(
-      PackageIdentifier pkgId, PackageLoadMetrics metrics) {
-    return new AutoValue_PackageLoadMetricsContainer(pkgId, metrics);
-  }
-
-  public abstract PackageIdentifier getPackageIdentifier();
-
-  abstract PackageLoadMetrics getPackageLoadMetricsInternal();
-
-  /** Construct a full PackageMetrics object with the name set lazily from the PackageIdentifier. */
-  public PackageLoadMetrics getPackageLoadMetrics() {
-    return getPackageLoadMetricsInternal().toBuilder()
-        .setName(getPackageIdentifier().toString())
-        .build();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsContainer.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsContainer.java
new file mode 100644
index 0000000..4cab05a
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsContainer.java
@@ -0,0 +1,56 @@
+// Copyright 2020 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.packages.metrics;
+
+import com.google.auto.value.AutoValue;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.protobuf.util.Durations;
+import java.util.Comparator;
+
+/** Container class holding a PackageIdentifier and PackageMetrics proto. */
+@AutoValue
+public abstract class PackageMetricsContainer {
+
+  /** Sorts by LoadTime Duration. */
+  public static final Comparator<PackageMetricsContainer> LOAD_TIMES_COMP =
+      Comparator.comparing(
+          c -> c.getPackageMetricsInternal().getLoadDuration(), Durations.comparator());
+  /** Sorts by Num Target count . */
+  public static final Comparator<PackageMetricsContainer> NUM_TARGETS_COMP =
+      Comparator.comparingLong(c -> c.getPackageMetricsInternal().getNumTargets());
+  /** Sorts by Comutation Steps count. */
+  public static final Comparator<PackageMetricsContainer> COMPUTATION_STEPS_COMP =
+      Comparator.comparingLong(c -> c.getPackageMetricsInternal().getComputationSteps());
+  /** Sorts by Transitive Load Count. */
+  public static final Comparator<PackageMetricsContainer> TRANSITIVE_LOADS_COMP =
+      Comparator.comparingLong(c -> c.getPackageMetricsInternal().getNumTransitiveLoads());
+  /** Sorts by Package Overhead. */
+  public static final Comparator<PackageMetricsContainer> OVERHEAD_COMP =
+      Comparator.comparingLong(c -> c.getPackageMetricsInternal().getPackageOverhead());
+
+  public static PackageMetricsContainer create(PackageIdentifier pkgId, PackageMetrics metrics) {
+    return new AutoValue_PackageMetricsContainer(pkgId, metrics);
+  }
+
+  public abstract PackageIdentifier getPackageIdentifier();
+
+  abstract PackageMetrics getPackageMetricsInternal();
+
+  /** Construct a full PackageMetrics object with the name set lazily from the PackageIdentifier. */
+  public PackageMetrics getPackageMetrics() {
+    return getPackageMetricsInternal().toBuilder()
+        .setName(getPackageIdentifier().toString())
+        .build();
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java
index f96d10d..19b5323 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsModule.java
@@ -48,14 +48,6 @@
             "Configures PackageMetrics to record all metrics for all packages. Disables Top-n INFO"
                 + " logging.")
     public boolean enableAllMetrics;
-
-    @Option(
-        name = "experimental_publish_package_metrics_in_bep",
-        defaultValue = "false",
-        documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
-        effectTags = {OptionEffectTag.BAZEL_MONITORING},
-        help = "Whether to publish package metrics in the BEP.")
-    public boolean publishPackageMetricsInBep;
   }
 
   private final PackageMetricsPackageLoadingListener packageLoadingListener;
@@ -91,7 +83,6 @@
             ? new CompletePackageMetricsRecorder()
             : new ExtremaPackageMetricsRecorder(Math.max(options.numberOfPackagesToTrack, 0));
     packageLoadingListener.setPackageMetricsRecorder(recorder);
-    packageLoadingListener.setPublishPackageMetricsInBep(options.publishPackageMetricsInBep);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
index 274efc2..053acc4 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
@@ -26,8 +26,6 @@
   @GuardedBy("this")
   private PackageMetricsRecorder recorder;
 
-  private boolean publishPackageMetricsInBep = false;
-
   @GuardedBy("PackageMetricsPackageLoadingListener.class")
   private static PackageMetricsPackageLoadingListener instance = null;
 
@@ -53,8 +51,8 @@
       return;
     }
 
-    PackageLoadMetrics.Builder builder =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics.Builder builder =
+        PackageMetrics.newBuilder()
             .setLoadDuration(Durations.fromNanos(loadTimeNanos))
             .setComputationSteps(pkg.getComputationSteps())
             .setNumTargets(pkg.getTargets().size())
@@ -72,14 +70,6 @@
     this.recorder = recorder;
   }
 
-  public void setPublishPackageMetricsInBep(boolean publishPackageMetricsInBep) {
-    this.publishPackageMetricsInBep = publishPackageMetricsInBep;
-  }
-
-  public boolean getPublishPackageMetricsInBep() {
-    return publishPackageMetricsInBep;
-  }
-
   /** Returns the PackageMetricsRecorder, if any, for the PackageLoadingListener. */
   public synchronized PackageMetricsRecorder getPackageMetricsRecorder() {
     return recorder;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsRecorder.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsRecorder.java
index f8b4cc4..79ea6c6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsRecorder.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsRecorder.java
@@ -28,7 +28,7 @@
   }
 
   /** Records the metrics for a given package. */
-  void recordMetrics(PackageIdentifier pkgId, PackageLoadMetrics metrics);
+  void recordMetrics(PackageIdentifier pkgId, PackageMetrics metrics);
 
   /**
    * Returns a {@code Map<PackageIdentifier, Duration>} of recorded load durations. This may contain
@@ -70,5 +70,5 @@
   Type getRecorderType();
 
   /** If Type is ALL returns metrics for all Packages loaded. */
-  Collection<PackageLoadMetrics> getPackageLoadMetrics();
+  Collection<PackageMetrics> getPackageMetrics();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/package_load_metrics.proto b/src/main/java/com/google/devtools/build/lib/packages/metrics/package_metrics.proto
similarity index 91%
rename from src/main/java/com/google/devtools/build/lib/packages/metrics/package_load_metrics.proto
rename to src/main/java/com/google/devtools/build/lib/packages/metrics/package_metrics.proto
index e27ecce..c643fcd 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/package_load_metrics.proto
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/package_metrics.proto
@@ -20,12 +20,12 @@
 option java_package = "com.google.devtools.build.lib.packages.metrics";
 option java_multiple_files = true;
 
-// Message used to concisely report all package metrics.
-message PackageLoadMetrics {
+// Message used to consisely report all package metrics.
+message PackageMetrics {
   // Name of the package.
   optional string name = 1;
 
-  // Wall-time duration it took to construct the package.
+  // Walltime Duration it took to construct the package.
   optional google.protobuf.Duration load_duration = 2;
 
   // Number of targets created in the package.
diff --git a/src/test/java/com/google/devtools/build/lib/packages/metrics/BUILD b/src/test/java/com/google/devtools/build/lib/packages/metrics/BUILD
index 366c3ca..db6852f 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/metrics/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/packages/metrics/BUILD
@@ -21,7 +21,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/packages/metrics",
-        "//src/main/java/com/google/devtools/build/lib/packages/metrics:package_load_metrics_java_proto",
+        "//src/main/java/com/google/devtools/build/lib/packages/metrics:package_metrics_java_proto",
         "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:junit4",
diff --git a/src/test/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListenerTest.java b/src/test/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListenerTest.java
index 9df24da..1991882 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListenerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListenerTest.java
@@ -410,8 +410,8 @@
 
     recordEverything();
 
-    PackageLoadMetrics pkg1 =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics pkg1 =
+        PackageMetrics.newBuilder()
             .setName("my/pkg1")
             .setLoadDuration(Durations.fromMillis(42))
             .setComputationSteps(1000)
@@ -420,8 +420,8 @@
             .setPackageOverhead(100_000)
             .build();
 
-    PackageLoadMetrics pkg2 =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics pkg2 =
+        PackageMetrics.newBuilder()
             .setName("my/pkg2")
             .setLoadDuration(Durations.fromMillis(43))
             .setComputationSteps(100)
@@ -430,8 +430,8 @@
             .setPackageOverhead(200_000)
             .build();
 
-    PackageLoadMetrics pkg3 =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics pkg3 =
+        PackageMetrics.newBuilder()
             .setName("my/pkg3")
             .setLoadDuration(Durations.fromMillis(44))
             .setComputationSteps(10)
@@ -440,7 +440,7 @@
             .setPackageOverhead(300_000)
             .build();
 
-    assertThat(underTest.getPackageMetricsRecorder().getPackageLoadMetrics())
+    assertThat(underTest.getPackageMetricsRecorder().getPackageMetrics())
         .containsExactly(pkg1, pkg2, pkg3);
     recorder.loadingFinished();
     assertAllMapsEmpty(recorder);
@@ -453,8 +453,8 @@
 
     recordEverything();
 
-    PackageLoadMetrics pkg1 =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics pkg1 =
+        PackageMetrics.newBuilder()
             .setName("my/pkg1")
             .setLoadDuration(Durations.fromMillis(42))
             .setComputationSteps(1000)
@@ -463,8 +463,8 @@
             .setPackageOverhead(100_000)
             .build();
 
-    PackageLoadMetrics pkg2 =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics pkg2 =
+        PackageMetrics.newBuilder()
             .setName("my/pkg2")
             .setLoadDuration(Durations.fromMillis(43))
             .setComputationSteps(100)
@@ -473,8 +473,8 @@
             .setPackageOverhead(200_000)
             .build();
 
-    PackageLoadMetrics pkg3 =
-        PackageLoadMetrics.newBuilder()
+    PackageMetrics pkg3 =
+        PackageMetrics.newBuilder()
             .setName("my/pkg3")
             .setLoadDuration(Durations.fromMillis(44))
             .setComputationSteps(10)
@@ -483,7 +483,7 @@
             .setPackageOverhead(300_000)
             .build();
 
-    assertThat(underTest.getPackageMetricsRecorder().getPackageLoadMetrics())
+    assertThat(underTest.getPackageMetricsRecorder().getPackageMetrics())
         .containsExactly(pkg1, pkg2, pkg3);
     recorder.loadingFinished();
     assertAllMapsEmpty(recorder);
