Require explicit ExecKind in SpawnMetrics.Builder and remove SpawnMetrics.EMPTY

Previously we used `REMOTE` as the default but now we'll require setting
`ExecKind` explicitly. To make it less error prone, I've introduced a few
factory methods that set it. Also, as previously discussed, I've introduced
a new `ExecKind.OTHER` (IMHO sounds a bit better than the initial proposal
of `INTERNAL`, but I don't feel strongly, so let me know if you prefer
the latter).

We also discussed not setting `ExecKind` in `SpawnMetrics.EMPTY` (and using
something like `null`), but I found it a bit tricky to really define what
that would actually mean, now that we have `ExecKind` (e.g., should we allow
aggregating such "empty" values? if yes, should it be commutative? etc.)
But I've noticed that after the introduction of `AggregatedSpawnMetrics`,
we only use `EMPTY` in one place and it's possible to simply remove it, which
avoids the problem.

RELNOTES: None.
PiperOrigin-RevId: 314687611
diff --git a/src/test/java/com/google/devtools/build/lib/actions/AggregatedSpawnMetricsTest.java b/src/test/java/com/google/devtools/build/lib/actions/AggregatedSpawnMetricsTest.java
index 34ef58c..5505605 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/AggregatedSpawnMetricsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/AggregatedSpawnMetricsTest.java
@@ -27,8 +27,7 @@
   @Test
   public void sumAllMetrics() throws Exception {
     SpawnMetrics metrics1 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(2))
             .setInputBytes(10)
@@ -36,8 +35,7 @@
             .setMemoryEstimateBytes(30)
             .build();
     SpawnMetrics metrics2 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(10))
             .setExecutionWallTime(Duration.ofSeconds(20))
             .setInputBytes(100)
@@ -59,8 +57,7 @@
   @Test
   public void sumDurationMetricsMaxOther() throws Exception {
     SpawnMetrics metrics1 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(2))
             .setInputBytes(10)
@@ -68,8 +65,7 @@
             .setMemoryEstimateBytes(30)
             .build();
     SpawnMetrics metrics2 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(10))
             .setExecutionWallTime(Duration.ofSeconds(20))
             .setInputBytes(100)
@@ -91,20 +87,11 @@
   @Test
   public void aggregatingMetrics_preservesExecKind() throws Exception {
     SpawnMetrics metrics1 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.LOCAL)
-            .setTotalTime(Duration.ofSeconds(1))
-            .build();
+        SpawnMetrics.Builder.forLocalExec().setTotalTime(Duration.ofSeconds(1)).build();
     SpawnMetrics metrics2 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
-            .setTotalTime(Duration.ofSeconds(2))
-            .build();
+        SpawnMetrics.Builder.forRemoteExec().setTotalTime(Duration.ofSeconds(2)).build();
     SpawnMetrics metrics3 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.WORKER)
-            .setTotalTime(Duration.ofSeconds(3))
-            .build();
+        SpawnMetrics.Builder.forWorkerExec().setTotalTime(Duration.ofSeconds(3)).build();
 
     AggregatedSpawnMetrics aggregated = AggregatedSpawnMetrics.EMPTY;
     aggregated = aggregated.sumAllMetrics(metrics1);
@@ -122,21 +109,18 @@
   @Test
   public void toString_printsOnlyRemote() throws Exception {
     SpawnMetrics metrics1 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.LOCAL)
+        SpawnMetrics.Builder.forLocalExec()
             .setTotalTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(1))
             .build();
     SpawnMetrics metrics2 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(2))
             .setNetworkTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(1))
             .build();
     SpawnMetrics metrics3 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.WORKER)
+        SpawnMetrics.Builder.forWorkerExec()
             .setTotalTime(Duration.ofSeconds(3))
             .setQueueTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(2))
diff --git a/src/test/java/com/google/devtools/build/lib/actions/SpawnMetricsTest.java b/src/test/java/com/google/devtools/build/lib/actions/SpawnMetricsTest.java
index 0f3c1ae..75dee98 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/SpawnMetricsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/SpawnMetricsTest.java
@@ -27,8 +27,7 @@
   @Test
   public void builder_addDurationsNonDurations() throws Exception {
     SpawnMetrics metrics1 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(2))
             .setInputBytes(10)
@@ -36,8 +35,7 @@
             .setMemoryEstimateBytes(30)
             .build();
     SpawnMetrics metrics2 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(10))
             .setExecutionWallTime(Duration.ofSeconds(20))
             .setInputBytes(100)
@@ -46,8 +44,7 @@
             .build();
 
     SpawnMetrics result =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .addDurations(metrics1)
             .addDurations(metrics2)
             .addNonDurations(metrics1)
@@ -64,8 +61,7 @@
   @Test
   public void builder_addDurationsMaxNonDurations() throws Exception {
     SpawnMetrics metrics1 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(1))
             .setExecutionWallTime(Duration.ofSeconds(2))
             .setInputBytes(10)
@@ -73,8 +69,7 @@
             .setMemoryEstimateBytes(30)
             .build();
     SpawnMetrics metrics2 =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .setTotalTime(Duration.ofSeconds(10))
             .setExecutionWallTime(Duration.ofSeconds(20))
             .setInputBytes(100)
@@ -83,8 +78,7 @@
             .build();
 
     SpawnMetrics result =
-        new SpawnMetrics.Builder()
-            .setExecKind(SpawnMetrics.ExecKind.REMOTE)
+        SpawnMetrics.Builder.forRemoteExec()
             .addDurations(metrics1)
             .addDurations(metrics2)
             .maxNonDurations(metrics1)
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
index ad1f45f..aac8abd 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
@@ -975,7 +975,7 @@
   @Test
   public void accountingAddsDurationsForStages() {
     SpawnMetrics.Builder builder =
-        new SpawnMetrics.Builder()
+        SpawnMetrics.Builder.forRemoteExec()
             .setQueueTime(Duration.ofSeconds(1))
             .setSetupTime(Duration.ofSeconds(2))
             .setExecutionWallTime(Duration.ofSeconds(2))
@@ -1026,10 +1026,7 @@
   }
 
   private RemoteSpawnRunner newSpawnRunner() {
-    return newSpawnRunner(
-        executor,
-        /* reporter= */ null,
-        /* topLevelOutputs= */ ImmutableSet.of());
+    return newSpawnRunner(executor, /* reporter= */ null, /* topLevelOutputs= */ ImmutableSet.of());
   }
 
   private RemoteSpawnRunner newSpawnRunner(Reporter reporter) {