diff options
| author | bors <bors@rust-lang.org> | 2020-02-29 07:27:29 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-02-29 07:27:29 +0000 |
| commit | 04e7f96dd89b1f0ad615dff1c85d11d4c4c64cb4 (patch) | |
| tree | 1f228816ea96985eaa07f458222b143b35f1e227 | |
| parent | 55aee8d49628ae8218e91745c388d5dc36771248 (diff) | |
| parent | ee064befa06ad54193786c9169672f9349d0bfaf (diff) | |
| download | rust-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.rs | 8 |
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); } |
