about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-02-29 07:27:29 +0000
committerbors <bors@rust-lang.org>2020-02-29 07:27:29 +0000
commit04e7f96dd89b1f0ad615dff1c85d11d4c4c64cb4 (patch)
tree1f228816ea96985eaa07f458222b143b35f1e227
parent55aee8d49628ae8218e91745c388d5dc36771248 (diff)
parentee064befa06ad54193786c9169672f9349d0bfaf (diff)
downloadrust-04e7f96dd89b1f0ad615dff1c85d11d4c4c64cb4.tar.gz
rust-04e7f96dd89b1f0ad615dff1c85d11d4c4c64cb4.zip
Auto merge of #69227 - Marwes:buffer_stderr, r=varkor
perf: Buffer stderr when writing json errors/warnings

Since `stderr` is unbuffered, writing out json messages actually take up
about ~10%/0.1s of the runtime of the `inflate` benchmark as it generates a fair number of warnings.

cc #64413
-rw-r--r--src/librustc_errors/json.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/librustc_errors/json.rs b/src/librustc_errors/json.rs
index 1f6e268b506..df73785b8f6 100644
--- a/src/librustc_errors/json.rs
+++ b/src/librustc_errors/json.rs
@@ -48,7 +48,7 @@ impl JsonEmitter {
         macro_backtrace: bool,
     ) -> JsonEmitter {
         JsonEmitter {
-            dst: Box::new(io::stderr()),
+            dst: Box::new(io::BufWriter::new(io::stderr())),
             registry,
             sm: source_map,
             pretty,
@@ -104,7 +104,8 @@ impl Emitter for JsonEmitter {
             writeln!(&mut self.dst, "{}", as_pretty_json(&data))
         } else {
             writeln!(&mut self.dst, "{}", as_json(&data))
-        };
+        }
+        .and_then(|_| self.dst.flush());
         if let Err(e) = result {
             panic!("failed to print diagnostics: {:?}", e);
         }
@@ -116,7 +117,8 @@ impl Emitter for JsonEmitter {
             writeln!(&mut self.dst, "{}", as_pretty_json(&data))
         } else {
             writeln!(&mut self.dst, "{}", as_json(&data))
-        };
+        }
+        .and_then(|_| self.dst.flush());
         if let Err(e) = result {
             panic!("failed to print notification: {:?}", e);
         }