mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Read file in chunks and send chunks to FetchTaskTarget instead of read_to_end call
This commit is contained in:
parent
440e855c33
commit
f04c965a9b
1 changed files with 17 additions and 3 deletions
|
@ -25,7 +25,7 @@ use servo_url::ServoUrl;
|
|||
use std::borrow::Cow;
|
||||
use std::fmt;
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use std::io::{BufReader, BufRead};
|
||||
use std::mem;
|
||||
use std::str;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
@ -33,6 +33,8 @@ use std::sync::atomic::Ordering;
|
|||
use std::sync::mpsc::{Sender, Receiver};
|
||||
use subresource_integrity::is_response_integrity_valid;
|
||||
|
||||
const FILE_CHUNK_SIZE: usize = 32768; //32 KB
|
||||
|
||||
pub type Target<'a> = &'a mut (FetchTaskTarget + Send);
|
||||
|
||||
pub enum Data {
|
||||
|
@ -486,8 +488,20 @@ fn scheme_fetch(request: &mut Request,
|
|||
Ok(file_path) => {
|
||||
match File::open(file_path.clone()) {
|
||||
Ok(mut file) => {
|
||||
let mut bytes = vec![];
|
||||
let _ = file.read_to_end(&mut bytes);
|
||||
let mut reader = BufReader::with_capacity(FILE_CHUNK_SIZE, file);
|
||||
let mut bytes = Vec::new();
|
||||
loop {
|
||||
let length = {
|
||||
let mut buffer = reader.fill_buf().unwrap().to_vec();
|
||||
let buffer_len = buffer.len();
|
||||
bytes.append(&mut buffer);
|
||||
target.process_response_chunk(buffer);
|
||||
buffer_len
|
||||
};
|
||||
if length == 0 { break; }
|
||||
reader.consume(length);
|
||||
}
|
||||
|
||||
let mime = guess_mime_type(file_path);
|
||||
|
||||
let mut response = Response::new(url);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue