diff --git a/src/main/java/com/google/devtools/build/lib/actions/DiscoveredInputsEvent.java b/src/main/java/com/google/devtools/build/lib/actions/DiscoveredInputsEvent.java
deleted file mode 100644
index fd1a36b..0000000
--- a/src/main/java/com/google/devtools/build/lib/actions/DiscoveredInputsEvent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019 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.actions;
-
-import com.google.devtools.build.lib.events.ExtendedEventHandler;
-
-/** Event for passing SpawnMetrics for the discover inputs phase. */
-public class DiscoveredInputsEvent implements ExtendedEventHandler.ProgressLike {
-  private final SpawnMetrics metrics;
-  private final Action action;
-  private final long startTimeNanos;
-
-  public DiscoveredInputsEvent(SpawnMetrics metrics, Action action, long startTimeNanos) {
-    this.metrics = metrics;
-    this.action = action;
-    this.startTimeNanos = startTimeNanos;
-  }
-
-  public SpawnMetrics getMetrics() {
-    return metrics;
-  }
-
-  public Action getAction() {
-    return action;
-  }
-
-  public long getStartTimeNanos() {
-    return startTimeNanos;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java
index d08a908..c6362324 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java
@@ -165,26 +165,26 @@
   }
 
   /**
-   * An action can run multiple spawns. Those calls can be sequential or parallel. If action is a
-   * sequence of calls we aggregate the SpawnMetrics of all the SpawnResults. If there are multiples
-   * of the same action run in parallel, we keep the maximum runtime SpawnMetrics. We will also set
-   * the longestPhaseSpawnRunnerName to the longest running spawn runner name across all phases if
-   * it exists.
+   * An action can run multiple spawns. Those calls can be sequential or parallel. If it is a
+   * sequence of calls we should aggregate the metrics by collecting all the SpawnResults, if they
+   * are run in parallel we should keep the maximum runtime spawn. We will also set the
+   * longestPhaseSpawnRunnerName to the longest running spawn runner name across all phases.
    */
-  void addSpawnResult(SpawnMetrics metrics, @Nullable String runnerName) {
+  void addSpawnResult(SpawnResult spawnResult) {
     if (this.phaseChange) {
       this.totalSpawnMetrics =
           SpawnMetrics.aggregateMetrics(
               ImmutableList.of(this.totalSpawnMetrics, this.phaseMaxMetrics), true);
-      this.phaseMaxMetrics = metrics;
+      this.phaseMaxMetrics = spawnResult.getMetrics();
       this.phaseChange = false;
-    } else if (metrics.totalTime().compareTo(this.phaseMaxMetrics.totalTime()) > 0) {
-      this.phaseMaxMetrics = metrics;
+    } else if (spawnResult.getMetrics().totalTime().compareTo(this.phaseMaxMetrics.totalTime())
+        > 0) {
+      this.phaseMaxMetrics = spawnResult.getMetrics();
     }
 
-    if (runnerName != null && metrics.totalTime().compareTo(this.longestRunningTotalDuration) > 0) {
-      this.longestPhaseSpawnRunnerName = runnerName;
-      this.longestRunningTotalDuration = metrics.totalTime();
+    if (spawnResult.getMetrics().totalTime().compareTo(this.longestRunningTotalDuration) > 0) {
+      this.longestPhaseSpawnRunnerName = spawnResult.getRunnerName();
+      this.longestRunningTotalDuration = spawnResult.getMetrics().totalTime();
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java
index 59411d3..632acd5 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java
@@ -30,7 +30,6 @@
 import com.google.devtools.build.lib.actions.Actions;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.CachedActionEvent;
-import com.google.devtools.build.lib.actions.DiscoveredInputsEvent;
 import com.google.devtools.build.lib.actions.SpawnExecutedEvent;
 import com.google.devtools.build.lib.actions.SpawnMetrics;
 import com.google.devtools.build.lib.actions.SpawnResult;
@@ -133,7 +132,6 @@
     return outputArtifactToComponent;
   }
 
-  /** Changes the phase of the action */
   @Subscribe
   @AllowConcurrentEvents
   public void nextCriticalPathPhase(SpawnExecutedEvent.ChangePhase phase) {
@@ -160,7 +158,7 @@
         Preconditions.checkNotNull(outputArtifactToComponent.get(primaryOutput));
 
     SpawnResult spawnResult = event.getSpawnResult();
-    stats.addSpawnResult(spawnResult.getMetrics(), spawnResult.getRunnerName());
+    stats.addSpawnResult(spawnResult);
   }
 
   /** Returns the list of components using the most memory. */
@@ -196,19 +194,8 @@
         .map((e) -> e.getValue());
   }
 
-  /** Creates a CriticalPathComponent and adds the duration of input discovery and changes phase. */
-  @Subscribe
-  @AllowConcurrentEvents
-  public void discoverInputs(DiscoveredInputsEvent event) {
-    CriticalPathComponent stats =
-        tryAddComponent(createComponent(event.getAction(), event.getStartTimeNanos()));
-    stats.addSpawnResult(event.getMetrics(), null);
-    stats.changePhase();
-  }
-
   /**
-   * Record an action that has started to run. If the CriticalPathComponent has not been created,
-   * initialize it.
+   * Record an action that has started to run.
    *
    * @param event information about the started action
    */
@@ -290,8 +277,8 @@
   @AllowConcurrentEvents
   public void actionCached(CachedActionEvent event) {
     Action action = event.getAction();
-    CriticalPathComponent component =
-        tryAddComponent(createComponent(action, event.getNanoTimeStart()));
+    CriticalPathComponent component
+        = tryAddComponent(createComponent(action, event.getNanoTimeStart()));
     finalizeActionStat(event.getNanoTimeStart(), action, component);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index c685193..852a4d3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -38,7 +38,6 @@
 import com.google.devtools.build.lib.actions.AlreadyReportedActionExecutionException;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactPathResolver;
-import com.google.devtools.build.lib.actions.DiscoveredInputsEvent;
 import com.google.devtools.build.lib.actions.FileArtifactValue;
 import com.google.devtools.build.lib.actions.FilesetOutputSymlink;
 import com.google.devtools.build.lib.actions.LostInputsActionExecutionException;
@@ -46,7 +45,6 @@
 import com.google.devtools.build.lib.actions.MissingInputFileException;
 import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit;
 import com.google.devtools.build.lib.actions.PackageRootResolver;
-import com.google.devtools.build.lib.actions.SpawnMetrics;
 import com.google.devtools.build.lib.actionsketch.ActionSketch;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.causes.Cause;
@@ -80,7 +78,6 @@
 import com.google.devtools.build.skyframe.ValueOrException;
 import com.google.devtools.build.skyframe.ValueOrException2;
 import java.io.IOException;
-import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -823,10 +820,6 @@
                 e,
                 action,
                 /*catastrophe=*/ false);
-          } finally {
-            state.discoveredInputsDuration =
-                state.discoveredInputsDuration.plus(
-                    Duration.ofNanos(BlazeClock.nanoTime() - actionStartTime));
           }
           Preconditions.checkState(
               env.valuesMissing() == (state.discoveredInputs == null),
@@ -862,16 +855,6 @@
           // Set the MetadataHandler to accept output information.
           metadataHandler.discardOutputMetadata();
       }
-      // When discover inputs completes, post an event with the duration values.
-      env.getListener()
-          .post(
-              new DiscoveredInputsEvent(
-                  new SpawnMetrics.Builder()
-                      .setParseTime(state.discoveredInputsDuration)
-                      .setTotalTime(state.discoveredInputsDuration)
-                      .build(),
-                  action,
-                  actionStartTime));
     }
 
     try {
@@ -1349,7 +1332,6 @@
     Token token = null;
     Iterable<Artifact> discoveredInputs = null;
     FileSystem actionFileSystem = null;
-    Duration discoveredInputsDuration = Duration.ZERO;
 
     /**
      * Stores the ArtifactNestedSetKeys created from the inputs of this actions. Objective: avoid
