Use a BufWriter in emit_module to reduce syscall overhead

For the coercions rustc-perf benchmark without this commit reduces the
total amount of time it takes to emit the object file from 270ms to
27ms.
This commit is contained in:
bjorn3 2024-11-08 16:16:03 +01:00
parent c637a84ad4
commit 8a0053e9e1

View File

@ -2,6 +2,7 @@
//! standalone executable. //! standalone executable.
use std::fs::{self, File}; use std::fs::{self, File};
use std::io::BufWriter;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::sync::Arc; use std::sync::Arc;
use std::thread::JoinHandle; use std::thread::JoinHandle;
@ -397,14 +398,19 @@ fn emit_module(
} }
let tmp_file = output_filenames.temp_path(OutputType::Object, Some(&name)); 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, Ok(file) => file,
Err(err) => return Err(format!("error creating object file: {}", err)), 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) { if let Err(err) = object.write_stream(&mut file) {
return Err(format!("error writing object file: {}", err)); 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()); prof.artifact_size("object_file", &*name, file.metadata().unwrap().len());