Buffer param file writes, significantly reducing the cost of creating many param files.
PiperOrigin-RevId: 257210434
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ParameterFile.java b/src/main/java/com/google/devtools/build/lib/actions/ParameterFile.java
index 6a9e61a..e15bc05 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ParameterFile.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ParameterFile.java
@@ -19,6 +19,7 @@
import com.google.devtools.build.lib.util.GccParamFileEscaper;
import com.google.devtools.build.lib.util.ShellEscaper;
import com.google.devtools.build.lib.vfs.PathFragment;
+import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
@@ -42,10 +43,8 @@
*/
public class ParameterFile {
- /**
- * Different styles of parameter files.
- */
- public static enum ParameterFileType {
+ /** Different styles of parameter files. */
+ public enum ParameterFileType {
/**
* A parameter file with every parameter on a separate line. This format
* cannot handle newlines in parameters. It is currently used for most
@@ -96,15 +95,16 @@
public static void writeParameterFile(
OutputStream out, Iterable<String> arguments, ParameterFileType type, Charset charset)
throws IOException {
+ OutputStream bufferedOut = new BufferedOutputStream(out);
switch (type) {
case SHELL_QUOTED:
- writeContent(out, ShellEscaper.escapeAll(arguments), charset);
+ writeContent(bufferedOut, ShellEscaper.escapeAll(arguments), charset);
break;
case GCC_QUOTED:
- writeContent(out, GccParamFileEscaper.escapeAll(arguments), charset);
+ writeContent(bufferedOut, GccParamFileEscaper.escapeAll(arguments), charset);
break;
case UNQUOTED:
- writeContent(out, arguments, charset);
+ writeContent(bufferedOut, arguments, charset);
break;
}
}