Allow modules to set the local file type for logs

PiperOrigin-RevId: 245726592
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEvent.java
index 233dbc5..c4ef206 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEvent.java
@@ -47,6 +47,7 @@
       STDOUT,
       STDERR,
       LOG,
+      PERFORMANCE_LOG,
     }
 
     public final Path path;
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java
index 82a16c4..09eb940 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.buildeventstream;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.util.Pair;
@@ -32,12 +33,12 @@
    * These values are local files that are uploaded if required, and turned into URIs as part of the
    * process.
    */
-  private final Collection<Pair<String, Path>> logFiles;
+  private final Collection<LogFileEntry> logFiles;
 
   public BuildToolLogs(
       Collection<Pair<String, ByteString>> directValues,
       Collection<Pair<String, String>> directUris,
-      Collection<Pair<String, Path>> logFiles) {
+      Collection<LogFileEntry> logFiles) {
     this.directValues = directValues;
     this.directUris = directUris;
     this.logFiles = logFiles;
@@ -56,8 +57,8 @@
   @Override
   public Collection<LocalFile> referencedLocalFiles() {
     ImmutableList.Builder<LocalFile> localFiles = ImmutableList.builder();
-    for (Pair<String, Path> logFile : logFiles) {
-      localFiles.add(new LocalFile(logFile.getSecond(), LocalFileType.LOG));
+    for (LogFileEntry logFile : logFiles) {
+      localFiles.add(logFile.toLocalFile());
     }
     return localFiles.build();
   }
@@ -80,14 +81,11 @@
               .setUri(direct.getSecond())
               .build());
     }
-    for (Pair<String, Path> logFile : logFiles) {
-      String uri = converters.pathConverter().apply(logFile.getSecond());
+    for (LogFileEntry logFile : logFiles) {
+      String uri = converters.pathConverter().apply(logFile.localPath);
       if (uri != null) {
         toolLogs.addLog(
-            BuildEventStreamProtos.File.newBuilder()
-                .setName(logFile.getFirst())
-                .setUri(uri)
-                .build());
+            BuildEventStreamProtos.File.newBuilder().setName(logFile.name).setUri(uri).build());
       }
     }
     return GenericBuildEvent.protoChaining(this).setBuildToolLogs(toolLogs.build()).build();
@@ -97,4 +95,38 @@
   public Collection<BuildEventId> postedAfter() {
     return ImmutableList.of(BuildEventId.buildFinished());
   }
+
+  /** A local log file. */
+  public static class LogFileEntry {
+    private final String name;
+    private final Path localPath;
+    private final LocalFileType fileType;
+
+    public LogFileEntry(String name, Path localPath, LocalFileType fileType) {
+      this.name = name;
+      this.localPath = localPath;
+      this.fileType = fileType;
+    }
+
+    public String getName() {
+      return name;
+    }
+
+    public Path getLocalPath() {
+      return localPath;
+    }
+
+    LocalFile toLocalFile() {
+      return new LocalFile(localPath, fileType);
+    }
+
+    @Override
+    public String toString() {
+      return MoreObjects.toStringHelper(this)
+          .add("name", name)
+          .add("localPath", localPath)
+          .add("fileType", fileType)
+          .toString();
+    }
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java
index 1045edc..8eac1f2 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java
@@ -19,7 +19,9 @@
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
+import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildToolLogs;
+import com.google.devtools.build.lib.buildeventstream.BuildToolLogs.LogFileEntry;
 import com.google.devtools.build.lib.skyframe.AspectValue;
 import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.Pair;
@@ -280,7 +282,7 @@
   public static final class BuildToolLogCollection {
     private final List<Pair<String, ByteString>> directValues = new ArrayList<>();
     private final List<Pair<String, String>> directUris = new ArrayList<>();
-    private final List<Pair<String, Path>> localFiles = new ArrayList<>();
+    private final List<LogFileEntry> localFiles = new ArrayList<>();
     private boolean frozen;
 
     public BuildToolLogCollection freeze() {
@@ -289,7 +291,7 @@
     }
 
     @VisibleForTesting
-    public List<Pair<String, Path>> getLocalFiles() {
+    public List<LogFileEntry> getLocalFiles() {
       return localFiles;
     }
 
@@ -306,8 +308,13 @@
     }
 
     public BuildToolLogCollection addLocalFile(String name, Path path) {
+      return addLocalFile(name, path, LocalFileType.LOG);
+    }
+
+    public BuildToolLogCollection addLocalFile(
+        String name, Path path, LocalFileType localFileType) {
       Preconditions.checkState(!frozen);
-      this.localFiles.add(Pair.of(name, path));
+      this.localFiles.add(new LogFileEntry(name, path, localFileType));
       return this;
     }