diff options
author | 2017-06-15 02:04:24 +0200 | |
---|---|---|
committer | 2017-06-16 09:26:59 +0200 | |
commit | e17f8af42b57252cf457354faf77d56a9b230734 (patch) | |
tree | 9337428349716600b1b159633788a7e1f86bf634 /src/main/java | |
parent | 8570e4d3b248d064f36d2276225ff98e7413f87f (diff) |
Mitigate GC churn in module map file writes: No need to pin entire contents in memory. Instead, write to the output stream incrementally.
PiperOrigin-RevId: 159046844
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java index 652700f5a0..137e22c871 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.vfs.PathFragment; import java.io.IOException; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; @@ -98,7 +99,7 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { return new DeterministicWriter() { @Override public void writeOutputFile(OutputStream out) throws IOException { - StringBuilder content = new StringBuilder(); + OutputStreamWriter content = new OutputStreamWriter(out, StandardCharsets.ISO_8859_1); PathFragment fragment = cppModuleMap.getArtifact().getExecPath(); int segmentsToExecPath = fragment.segmentCount() - 1; Optional<Artifact> umbrellaHeader = cppModuleMap.getUmbrellaHeader(); @@ -162,11 +163,11 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { .append(dep.getName()) .append("\" \"") .append(leadingPeriods) - .append(dep.getArtifact().getExecPath()) + .append(dep.getArtifact().getExecPathString()) .append("\""); } } - out.write(content.toString().getBytes(StandardCharsets.ISO_8859_1)); + content.flush(); } }; } @@ -185,9 +186,9 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { return ImmutableList.copyOf(expandedHeaders); } - private void appendHeader(StringBuilder content, String visibilitySpecifier, PathFragment path, - String leadingPeriods, boolean canCompile, HashSet<PathFragment> deduper, - boolean isUmbrellaHeader) { + private void appendHeader(Appendable content, String visibilitySpecifier, + PathFragment path, String leadingPeriods, boolean canCompile, HashSet<PathFragment> deduper, + boolean isUmbrellaHeader) throws IOException { if (deduper.contains(path)) { return; } @@ -197,7 +198,7 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { return; } if (generateSubmodules) { - content.append(" module \"").append(path).append("\" {\n"); + content.append(" module \"").append(path.toString()).append("\" {\n"); content.append(" export *\n "); } content.append(" "); @@ -207,7 +208,7 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { if (!canCompile || !shouldCompileHeader(path)) { content.append("textual "); } - content.append("header \"").append(leadingPeriods).append(path).append("\""); + content.append("header \"").append(leadingPeriods).append(path.toString()).append("\""); if (generateSubmodules) { content.append("\n }"); } |