Mmap the incremental data instead of reading it.
This commit is contained in:
parent
05cccdc9b3
commit
4afdeaaabd
4 changed files with 21 additions and 12 deletions
|
@ -14,6 +14,7 @@ use std::fs;
|
|||
use std::io::{self, Read};
|
||||
use std::path::Path;
|
||||
|
||||
use rustc_data_structures::memmap::Mmap;
|
||||
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
|
||||
use rustc_serialize::Encoder;
|
||||
|
||||
|
@ -54,14 +55,15 @@ pub fn read_file(
|
|||
report_incremental_info: bool,
|
||||
path: &Path,
|
||||
nightly_build: bool,
|
||||
) -> io::Result<Option<(Vec<u8>, usize)>> {
|
||||
let data = match fs::read(path) {
|
||||
Ok(data) => data,
|
||||
) -> io::Result<Option<(Mmap, usize)>> {
|
||||
let file = match fs::File::open(path) {
|
||||
Ok(file) => file,
|
||||
Err(err) if err.kind() == io::ErrorKind::NotFound => return Ok(None),
|
||||
Err(err) => return Err(err),
|
||||
};
|
||||
let mmap = unsafe { Mmap::map(file) }?;
|
||||
|
||||
let mut file = io::Cursor::new(data);
|
||||
let mut file = io::Cursor::new(&*mmap);
|
||||
|
||||
// Check FILE_MAGIC
|
||||
{
|
||||
|
@ -103,7 +105,7 @@ pub fn read_file(
|
|||
}
|
||||
|
||||
let post_header_start_pos = file.position() as usize;
|
||||
Ok(Some((file.into_inner(), post_header_start_pos)))
|
||||
Ok(Some((mmap, post_header_start_pos)))
|
||||
}
|
||||
|
||||
fn report_format_mismatch(report_incremental_info: bool, file: &Path, message: &str) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
//! Code to save/load the dep-graph from files.
|
||||
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::memmap::Mmap;
|
||||
use rustc_middle::dep_graph::{SerializedDepGraph, WorkProduct, WorkProductId};
|
||||
use rustc_middle::ty::OnDiskCache;
|
||||
use rustc_serialize::opaque::Decoder;
|
||||
|
@ -48,7 +49,7 @@ fn load_data(
|
|||
report_incremental_info: bool,
|
||||
path: &Path,
|
||||
nightly_build: bool,
|
||||
) -> LoadResult<(Vec<u8>, usize)> {
|
||||
) -> LoadResult<(Mmap, usize)> {
|
||||
match file_format::read_file(report_incremental_info, path, nightly_build) {
|
||||
Ok(Some(data_and_pos)) => LoadResult::Ok { data: data_and_pos },
|
||||
Ok(None) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue