Include input discovery time in the execution graph.

The CriticalPathComputer includes it as parse time, but here, we can add another field.

PiperOrigin-RevId: 500757360
Change-Id: I954fcb90b575a0bfd535dc190f7958fc689ae84f
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/ExecutionGraphModuleTest.java b/src/test/java/com/google/devtools/build/lib/runtime/ExecutionGraphModuleTest.java
index fa72a62..3c9685d 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/ExecutionGraphModuleTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/ExecutionGraphModuleTest.java
@@ -34,6 +34,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.actions.ArtifactRoot.RootType;
+import com.google.devtools.build.lib.actions.DiscoveredInputsEvent;
 import com.google.devtools.build.lib.actions.ExecutionGraph;
 import com.google.devtools.build.lib.actions.ResourceSet;
 import com.google.devtools.build.lib.actions.SimpleSpawn;
@@ -146,6 +147,57 @@
   }
 
   @Test
+  public void testSpawnWithDiscoverInputs() throws IOException {
+    UUID uuid = UUID.randomUUID();
+    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+    Spawn spawn =
+        new SimpleSpawn(
+            new FakeOwnerWithPrimaryOutput(
+                "Mnemonic", "Progress message", "//foo", "output/foo/out"),
+            ImmutableList.of("cmd"),
+            ImmutableMap.of("env", "value"),
+            ImmutableMap.of("exec", "value"),
+            /* inputs= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
+            /* outputs= */ ImmutableSet.of(createOutputArtifact("output/foo/out")),
+            ResourceSet.ZERO);
+    SpawnResult result =
+        new SpawnResult.Builder()
+            .setRunnerName("local")
+            .setStatus(Status.SUCCESS)
+            .setExitCode(0)
+            .setSpawnMetrics(
+                SpawnMetrics.Builder.forLocalExec()
+                    .setTotalTime(Duration.ofMillis(1234L))
+                    .setExecutionWallTime(Duration.ofMillis(2345L))
+                    .setProcessOutputsTime(Duration.ofMillis(3456L))
+                    .setParseTime(Duration.ofMillis(2000))
+                    .build())
+            .build();
+    startLogging(eventBus, uuid, buffer, DependencyInfo.NONE);
+    Instant startTimeInstant = Instant.ofEpochMilli(999888777L);
+    module.discoverInputs(
+        new DiscoveredInputsEvent(
+            SpawnMetrics.Builder.forOtherExec()
+                .setParseTime(Duration.ofMillis(987))
+                .setTotalTime(Duration.ofMillis(987))
+                .build(),
+            new ActionsTestUtil.NullAction(createOutputArtifact("output/foo/out")),
+            0));
+    module.spawnExecuted(new SpawnExecutedEvent(spawn, result, startTimeInstant));
+    module.buildComplete(
+        new BuildCompleteEvent(new BuildResult(startTimeInstant.toEpochMilli() + 1000)));
+
+    ImmutableList<ExecutionGraph.Node> nodes = parse(buffer);
+    ExecutionGraph.Metrics metrics = nodes.get(0).getMetrics();
+    assertThat(metrics.getDurationMillis()).isEqualTo(2221);
+    assertThat(metrics.getFetchMillis()).isEqualTo(0);
+    assertThat(metrics.getProcessMillis()).isEqualTo(2345);
+    assertThat(metrics.getProcessOutputsMillis()).isEqualTo(3456);
+    assertThat(metrics.getParseMillis()).isEqualTo(2000);
+    assertThat(metrics.getDiscoverInputsMillis()).isEqualTo(987);
+  }
+
+  @Test
   public void actionDepsWithThreeSpawns() throws IOException {
     UUID uuid = UUID.randomUUID();
     ByteArrayOutputStream buffer = new ByteArrayOutputStream();