diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2024-11-09 12:14:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-09 12:14:06 +0100 |
| commit | e9ac6804473d7d2dabe7b87be2fd4ac7b80a5253 (patch) | |
| tree | 2220be3150989177ace881aa38d6afe908680178 | |
| parent | b5966e4e88b649997bce5948ced6730a4913e692 (diff) | |
| parent | 8a0053e9e16586e060612db44578038d3edb107e (diff) | |
| download | rust-e9ac6804473d7d2dabe7b87be2fd4ac7b80a5253.tar.gz rust-e9ac6804473d7d2dabe7b87be2fd4ac7b80a5253.zip | |
Merge pull request #1541 from rust-lang/perf_opts
Use a BufWriter in emit_module to reduce syscall overhead
| -rw-r--r-- | src/driver/aot.rs | 8 | ||||
| -rw-r--r-- | src/lib.rs | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/driver/aot.rs b/src/driver/aot.rs index 419efa90600..8eab73ad5f9 100644 --- a/src/driver/aot.rs +++ b/src/driver/aot.rs @@ -2,6 +2,7 @@ //! standalone executable. use std::fs::{self, File}; +use std::io::BufWriter; use std::path::{Path, PathBuf}; use std::sync::Arc; use std::thread::JoinHandle; @@ -397,14 +398,19 @@ fn emit_module( } let tmp_file = output_filenames.temp_path(OutputType::Object, Some(&name)); - let mut file = match File::create(&tmp_file) { + let file = match File::create(&tmp_file) { Ok(file) => file, Err(err) => return Err(format!("error creating object file: {}", err)), }; + let mut file = BufWriter::new(file); if let Err(err) = object.write_stream(&mut file) { return Err(format!("error writing object file: {}", err)); } + let file = match file.into_inner() { + Ok(file) => file, + Err(err) => return Err(format!("error writing object file: {}", err)), + }; prof.artifact_size("object_file", &*name, file.metadata().unwrap().len()); diff --git a/src/lib.rs b/src/lib.rs index aba0c28f6b8..19a1de53d1d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -241,6 +241,8 @@ impl CodegenBackend for CraneliftCodegenBackend { sess: &Session, outputs: &OutputFilenames, ) -> (CodegenResults, FxIndexMap<WorkProductId, WorkProduct>) { + let _timer = sess.timer("finish_ongoing_codegen"); + ongoing_codegen.downcast::<driver::aot::OngoingCodegen>().unwrap().join( sess, outputs, |
