aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJack Koenig2020-09-30 11:20:40 -0700
committerGitHub2020-09-30 11:20:40 -0700
commit8657f419852b48b40c29e79b036006ab8a0a3b2c (patch)
treea949389f6ade4cdac09a9902d5c5fb5370b415bd /src
parent9038d89c38ca9ecf6ed702cd36a38cbef8652c8c (diff)
Speed up writing CustomFileEmission with buffering (#1906)
Also speed up common case of Array[Byte]
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/options/phases/WriteOutputAnnotations.scala9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/options/phases/WriteOutputAnnotations.scala b/src/main/scala/firrtl/options/phases/WriteOutputAnnotations.scala
index 54f0951f..0e26a5f7 100644
--- a/src/main/scala/firrtl/options/phases/WriteOutputAnnotations.scala
+++ b/src/main/scala/firrtl/options/phases/WriteOutputAnnotations.scala
@@ -6,7 +6,7 @@ import firrtl.AnnotationSeq
import firrtl.annotations.{Annotation, DeletedAnnotation, JsonProtocol}
import firrtl.options.{CustomFileEmission, Dependency, Phase, PhaseException, StageOptions, Unserializable, Viewer}
-import java.io.{File, FileOutputStream, PrintWriter}
+import java.io.{BufferedOutputStream, File, FileOutputStream, PrintWriter}
import scala.collection.mutable
@@ -37,8 +37,11 @@ class WriteOutputAnnotations extends Phase {
filesWritten.get(canonical) match {
case None =>
- val w = new FileOutputStream(filename)
- a.getBytes.foreach(w.write(_))
+ val w = new BufferedOutputStream(new FileOutputStream(filename))
+ a.getBytes match {
+ case arr: mutable.WrappedArray[Byte] => w.write(arr.array.asInstanceOf[Array[Byte]])
+ case other => other.foreach(w.write(_))
+ }
w.close()
filesWritten(canonical) = a
case Some(first) =>