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; } }