Replace all `Duration` fields in `SpawnResult` into `int`-s.

We already ignore non-set state of plenty of metrics before (e.g. `SpawnMetrics` are set to `Duration.ZERO` by default). So losing of this state should not affect execution.

PiperOrigin-RevId: 511758760
Change-Id: Iefa86151e5b0611712972d3f4dff29c8984b4841
diff --git a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
index 0bde6ba7..a12e94d 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
@@ -59,12 +59,12 @@
 import com.google.devtools.build.lib.view.test.TestStatus.BlazeTestStatus;
 import com.google.devtools.build.lib.view.test.TestStatus.TestCase;
 import com.google.devtools.build.lib.view.test.TestStatus.TestResultData;
+import com.google.protobuf.Duration;
 import com.google.protobuf.util.Durations;
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.time.Duration;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -375,54 +375,54 @@
     executionInfo.setTimingBreakdown(
         BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
             .setName("totalTime")
-            .setTime(toProtoDuration(sm.totalTime()))
+            .setTime(toProtoDuration(sm.totalTimeInMs()))
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("parseTime")
-                    .setTime(toProtoDuration(sm.parseTime()))
+                    .setTime(toProtoDuration(sm.parseTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("fetchTime")
-                    .setTime(toProtoDuration(sm.fetchTime()))
+                    .setTime(toProtoDuration(sm.fetchTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("queueTime")
-                    .setTime(toProtoDuration(sm.queueTime()))
+                    .setTime(toProtoDuration(sm.queueTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("uploadTime")
-                    .setTime(toProtoDuration(sm.uploadTime()))
+                    .setTime(toProtoDuration(sm.uploadTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("setupTime")
-                    .setTime(toProtoDuration(sm.setupTime()))
+                    .setTime(toProtoDuration(sm.setupTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("executionWallTime")
-                    .setTime(toProtoDuration(sm.executionWallTime()))
+                    .setTime(toProtoDuration(sm.executionWallTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("processOutputsTime")
-                    .setTime(toProtoDuration(sm.processOutputsTime()))
+                    .setTime(toProtoDuration(sm.processOutputsTimeInMs()))
                     .build())
             .addChild(
                 BuildEventStreamProtos.TestResult.ExecutionInfo.TimingBreakdown.newBuilder()
                     .setName("networkTime")
-                    .setTime(toProtoDuration(sm.networkTime()))
+                    .setTime(toProtoDuration(sm.networkTimeInMs()))
                     .build())
             .build());
 
     return executionInfo.build();
   }
 
-  private static com.google.protobuf.Duration toProtoDuration(Duration d) {
-    return Durations.fromNanos(d.toNanos());
+  private static Duration toProtoDuration(int timeInMs) {
+    return Durations.fromMillis(timeInMs);
   }
 
   /**
@@ -436,8 +436,7 @@
             action.getTestXmlGeneratorScript().getExecPath().getCallablePathString(),
             action.getTestLog().getExecPathString(),
             action.getXmlOutputPath().getPathString(),
-            Long.toString(
-                (result.getWallTime() == null ? Duration.ZERO : result.getWallTime()).getSeconds()),
+            Integer.toString(result.getWallTimeInMs() / 1000),
             Integer.toString(result.exitCode()));
     ImmutableMap.Builder<String, String> envBuilder = ImmutableMap.builder();
     // "PATH" and "TEST_BINARY" are also required, they should always be set in testEnv.
@@ -693,10 +692,7 @@
     // set. We fall back to the time measured here for backwards compatibility.
     long durationMillis = endTimeMillis - startTimeMillis;
     durationMillis =
-        (primaryResult.getWallTime() != null
-                ? primaryResult.getWallTime()
-                : Duration.ofMillis(durationMillis))
-            .toMillis();
+        (primaryResult.getWallTimeInMs() != 0 ? primaryResult.getWallTimeInMs() : durationMillis);
 
     testResultDataBuilder
         .setStartTimeMillisEpoch(startTimeMillis)