Unconditionally include the spawn metrics in the execution log and delete the --experimental_execution_log_spawn_metrics flag.

PiperOrigin-RevId: 563015767
Change-Id: I49963f0b0ec6f9da3bbad90a6ea80abb467520a1
diff --git a/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java b/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java
index 5cf5e02..8732f66 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java
@@ -442,14 +442,6 @@
   public PathFragment executionLogBinaryFile;
 
   @Option(
-      name = "experimental_execution_log_spawn_metrics",
-      defaultValue = "false",
-      documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
-      effectTags = {OptionEffectTag.UNKNOWN},
-      help = "Include spawn metrics in the executed spawns log.")
-  public boolean executionLogSpawnMetrics;
-
-  @Option(
       name = "execution_log_json_file",
       defaultValue = "null",
       category = "verbosity",
diff --git a/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java b/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java
index 92ffaa1..4fa73b3 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java
@@ -177,50 +177,48 @@
       builder.setTargetLabel(spawn.getTargetLabel());
     }
 
-    if (executionOptions != null && executionOptions.executionLogSpawnMetrics) {
-      SpawnMetrics metrics = result.getMetrics();
-      Protos.SpawnMetrics.Builder metricsBuilder = builder.getMetricsBuilder();
-      if (metrics.totalTimeInMs() != 0L) {
-        metricsBuilder.setTotalTime(millisToProto(metrics.totalTimeInMs()));
-      }
-      if (metrics.parseTimeInMs() != 0L) {
-        metricsBuilder.setParseTime(millisToProto(metrics.parseTimeInMs()));
-      }
-      if (metrics.networkTimeInMs() != 0L) {
-        metricsBuilder.setNetworkTime(millisToProto(metrics.networkTimeInMs()));
-      }
-      if (metrics.fetchTimeInMs() != 0L) {
-        metricsBuilder.setFetchTime(millisToProto(metrics.fetchTimeInMs()));
-      }
-      if (metrics.queueTimeInMs() != 0L) {
-        metricsBuilder.setQueueTime(millisToProto(metrics.queueTimeInMs()));
-      }
-      if (metrics.setupTimeInMs() != 0L) {
-        metricsBuilder.setSetupTime(millisToProto(metrics.setupTimeInMs()));
-      }
-      if (metrics.uploadTimeInMs() != 0L) {
-        metricsBuilder.setUploadTime(millisToProto(metrics.uploadTimeInMs()));
-      }
-      if (metrics.executionWallTimeInMs() != 0L) {
-        metricsBuilder.setExecutionWallTime(millisToProto(metrics.executionWallTimeInMs()));
-      }
-      if (metrics.processOutputsTimeInMs() != 0L) {
-        metricsBuilder.setProcessOutputsTime(millisToProto(metrics.processOutputsTimeInMs()));
-      }
-      if (metrics.retryTimeInMs() != 0L) {
-        metricsBuilder.setRetryTime(millisToProto(metrics.retryTimeInMs()));
-      }
-      metricsBuilder.setInputBytes(metrics.inputBytes());
-      metricsBuilder.setInputFiles(metrics.inputFiles());
-      metricsBuilder.setMemoryEstimateBytes(metrics.memoryEstimate());
-      metricsBuilder.setInputBytesLimit(metrics.inputBytesLimit());
-      metricsBuilder.setInputFilesLimit(metrics.inputFilesLimit());
-      metricsBuilder.setOutputBytesLimit(metrics.outputBytesLimit());
-      metricsBuilder.setOutputFilesLimit(metrics.outputFilesLimit());
-      metricsBuilder.setMemoryBytesLimit(metrics.memoryLimit());
-      if (metrics.timeLimitInMs() != 0L) {
-        metricsBuilder.setTimeLimit(millisToProto(metrics.timeLimitInMs()));
-      }
+    SpawnMetrics metrics = result.getMetrics();
+    Protos.SpawnMetrics.Builder metricsBuilder = builder.getMetricsBuilder();
+    if (metrics.totalTimeInMs() != 0L) {
+      metricsBuilder.setTotalTime(millisToProto(metrics.totalTimeInMs()));
+    }
+    if (metrics.parseTimeInMs() != 0L) {
+      metricsBuilder.setParseTime(millisToProto(metrics.parseTimeInMs()));
+    }
+    if (metrics.networkTimeInMs() != 0L) {
+      metricsBuilder.setNetworkTime(millisToProto(metrics.networkTimeInMs()));
+    }
+    if (metrics.fetchTimeInMs() != 0L) {
+      metricsBuilder.setFetchTime(millisToProto(metrics.fetchTimeInMs()));
+    }
+    if (metrics.queueTimeInMs() != 0L) {
+      metricsBuilder.setQueueTime(millisToProto(metrics.queueTimeInMs()));
+    }
+    if (metrics.setupTimeInMs() != 0L) {
+      metricsBuilder.setSetupTime(millisToProto(metrics.setupTimeInMs()));
+    }
+    if (metrics.uploadTimeInMs() != 0L) {
+      metricsBuilder.setUploadTime(millisToProto(metrics.uploadTimeInMs()));
+    }
+    if (metrics.executionWallTimeInMs() != 0L) {
+      metricsBuilder.setExecutionWallTime(millisToProto(metrics.executionWallTimeInMs()));
+    }
+    if (metrics.processOutputsTimeInMs() != 0L) {
+      metricsBuilder.setProcessOutputsTime(millisToProto(metrics.processOutputsTimeInMs()));
+    }
+    if (metrics.retryTimeInMs() != 0L) {
+      metricsBuilder.setRetryTime(millisToProto(metrics.retryTimeInMs()));
+    }
+    metricsBuilder.setInputBytes(metrics.inputBytes());
+    metricsBuilder.setInputFiles(metrics.inputFiles());
+    metricsBuilder.setMemoryEstimateBytes(metrics.memoryEstimate());
+    metricsBuilder.setInputBytesLimit(metrics.inputBytesLimit());
+    metricsBuilder.setInputFilesLimit(metrics.inputFilesLimit());
+    metricsBuilder.setOutputBytesLimit(metrics.outputBytesLimit());
+    metricsBuilder.setOutputFilesLimit(metrics.outputFilesLimit());
+    metricsBuilder.setMemoryBytesLimit(metrics.memoryLimit());
+    if (metrics.timeLimitInMs() != 0L) {
+      metricsBuilder.setTimeLimit(millisToProto(metrics.timeLimitInMs()));
     }
 
     try (SilentCloseable c = Profiler.instance().profile("logSpawn/write")) {
diff --git a/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java
index b604dee..736f24e 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java
@@ -331,7 +331,7 @@
 
   @Test
   public void testLogSpawn() throws Exception {
-    setUpExecutionContext(/* executionOptions= */ null, /* remoteOptions= */ null);
+    setUpExecutionContext(/* remoteOptions= */ null);
 
     Artifact input = ActionsTestUtil.createArtifact(rootDir, scratch.file("/execroot/foo", "1"));
     scratch.file("/execroot/out1", "123");
@@ -402,13 +402,14 @@
             .setRunner("runner")
             .setWalltime(Duration.getDefaultInstance())
             .setTargetLabel("//dummy:label")
+            .setMetrics(Protos.SpawnMetrics.getDefaultInstance())
             .build();
     verify(messageOutput).write(expectedSpawnLog);
   }
 
   @Test
   public void testLogSpawn_noPlatform_noLoggedPlatform() throws Exception {
-    setUpExecutionContext(/* executionOptions= */ null, /* remoteOptions= */ null);
+    setUpExecutionContext(/* remoteOptions= */ null);
 
     Spawn spawn = new SpawnBuilder("cmd").build();
 
@@ -435,7 +436,7 @@
             " value: \"1\"",
             "}");
 
-    setUpExecutionContext(/* executionOptions= */ null, remoteOptions);
+    setUpExecutionContext(remoteOptions);
     Spawn spawn = new SpawnBuilder("cmd").build();
     assertThrows(
         SpawnExecException.class,
@@ -452,10 +453,7 @@
 
   @Test
   public void testLogSpawn_spawnMetrics() throws Exception {
-    ExecutionOptions executionOptions = Options.getDefaults(ExecutionOptions.class);
-    executionOptions.executionLogSpawnMetrics = true;
-
-    setUpExecutionContext(executionOptions, /* remoteOptions= */ null);
+    setUpExecutionContext(/* remoteOptions= */ null);
 
     assertThrows(
         SpawnExecException.class,
@@ -480,7 +478,7 @@
             " name: \"a\"",
             " value: \"1\"",
             "}");
-    setUpExecutionContext(/* executionOptions= */ null, remoteOptions);
+    setUpExecutionContext(remoteOptions);
 
     PlatformInfo platformInfo =
         PlatformInfo.builder()
@@ -514,14 +512,17 @@
     verify(messageOutput).write(expected); // output will reflect default properties
   }
 
-  private void setUpExecutionContext(ExecutionOptions executionOptions, RemoteOptions remoteOptions)
-      throws Exception {
+  private void setUpExecutionContext(RemoteOptions remoteOptions) throws Exception {
     when(actionExecutionContext.getContext(eq(SpawnCache.class))).thenReturn(SpawnCache.NO_CACHE);
     when(actionExecutionContext.getExecRoot()).thenReturn(execRoot);
     when(actionExecutionContext.getContext(eq(SpawnLogContext.class)))
         .thenReturn(
             new SpawnLogContext(
-                execRoot, messageOutput, executionOptions, remoteOptions, SyscallCache.NO_CACHE));
+                execRoot,
+                messageOutput,
+                Options.getDefaults(ExecutionOptions.class),
+                remoteOptions,
+                SyscallCache.NO_CACHE));
     when(spawnRunner.exec(any(Spawn.class), any(SpawnExecutionContext.class)))
         .thenReturn(
             new SpawnResult.Builder()
@@ -547,6 +548,7 @@
         .setExitCode(23)
         .setRemoteCacheable(true)
         .setWalltime(Duration.getDefaultInstance())
-        .setTargetLabel("//dummy:label");
+        .setTargetLabel("//dummy:label")
+        .setMetrics(Protos.SpawnMetrics.getDefaultInstance());
   }
 }