diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2016-08-16 10:11:33 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2016-08-16 10:12:33 +0200 |
commit | 6cc862d0c654ee5c40758b34a66fb85bbda8a250 (patch) | |
tree | 9e20641bfe69840fe429d44d81d1aa8403808ecf /components | |
parent | cb01d37338ed65c9d1e32dc620d67a7ea8cbadcf (diff) | |
download | servo-6cc862d0c654ee5c40758b34a66fb85bbda8a250.tar.gz servo-6cc862d0c654ee5c40758b34a66fb85bbda8a250.zip |
Lessen pressure on the thread-local RNG
When loading HTTP requests, initialise the request ID only if devtools
are used, to lessen the pressure put on the RNG initialisation.
This tentatively fixes #11100 on OS X.
Diffstat (limited to 'components')
-rw-r--r-- | components/net/fetch/methods.rs | 9 | ||||
-rw-r--r-- | components/net/http_loader.rs | 17 |
2 files changed, 16 insertions, 10 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index e38d434b277..aa07b1d08a5 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -34,6 +34,7 @@ use std::fs::File; use std::io::Read; use std::iter::FromIterator; use std::mem::swap; +use std::ops::Deref; use std::rc::Rc; use std::sync::mpsc::{channel, Sender, Receiver}; use unicase::UniCase; @@ -952,7 +953,9 @@ fn http_network_fetch(request: Rc<Request>, let url = request.current_url(); let cancellation_listener = CancellationListener::new(None); - let request_id = uuid::Uuid::new_v4().simple().to_string(); + let request_id = devtools_chan.as_ref().map(|_| { + uuid::Uuid::new_v4().simple().to_string() + }); // XHR uses the default destination; other kinds of fetches (which haven't been implemented yet) // do not. Once we support other kinds of fetches we'll need to be more fine grained here @@ -962,7 +965,7 @@ fn http_network_fetch(request: Rc<Request>, &request.headers.borrow(), &cancellation_listener, &request.body.borrow(), &request.method.borrow(), &request.pipeline_id.get(), request.redirect_count.get() + 1, - &devtools_chan, &request_id, is_xhr); + request_id.as_ref().map(Deref::deref), is_xhr); let pipeline_id = request.pipeline_id.get(); let mut response = Response::new(); @@ -996,7 +999,7 @@ fn http_network_fetch(request: Rc<Request>, // Send an HttpResponse message to devtools with the corresponding request_id if let Some(pipeline_id) = pipeline_id { send_response_to_devtools( - &sender, request_id.into(), + &sender, request_id.unwrap(), meta_headers.map(Serde::into_inner), meta_status.map(Serde::into_inner), pipeline_id); diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 32c24600640..62df61bcd68 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -45,6 +45,7 @@ use std::collections::HashSet; use std::error::Error; use std::fmt; use std::io::{self, Cursor, Read, Write}; +use std::ops::Deref; use std::sync::mpsc::Sender; use std::sync::{Arc, RwLock}; use time; @@ -744,8 +745,7 @@ pub fn obtain_response<A>(request_factory: &HttpRequestFactory<R=A>, load_data_method: &Method, pipeline_id: &Option<PipelineId>, iters: u32, - devtools_chan: &Option<Sender<DevtoolsControlMsg>>, - request_id: &str, + request_id: Option<&str>, is_xhr: bool) -> Result<(A::R, Option<ChromeToDevtoolsControlMsg>), LoadError> where A: HttpRequest + 'static { @@ -808,10 +808,10 @@ pub fn obtain_response<A>(request_factory: &HttpRequestFactory<R=A>, let send_end = precise_time_ms(); - msg = if devtools_chan.is_some() { + msg = if let Some(request_id) = request_id { if let Some(pipeline_id) = *pipeline_id { Some(prepare_devtools_request( - request_id.clone().into(), + request_id.into(), url.clone(), method.clone(), headers, request_body.clone(), pipeline_id, time::now(), connect_end - connect_start, send_end - send_start, is_xhr)) @@ -968,7 +968,9 @@ pub fn load<A, B>(load_data: &LoadData, load_data.preserved_headers.clone() }; - let request_id = uuid::Uuid::new_v4().simple().to_string(); + let request_id = devtools_chan.as_ref().map(|_| { + uuid::Uuid::new_v4().simple().to_string() + }); modify_request_headers(&mut request_headers, &doc_url, &user_agent, load_data.referrer_policy, @@ -992,7 +994,8 @@ pub fn load<A, B>(load_data: &LoadData, let (response, msg) = try!(obtain_response(request_factory, &doc_url, &method, &request_headers, &cancel_listener, &load_data.data, &load_data.method, - &load_data.pipeline_id, iters, &devtools_chan, &request_id, false)); + &load_data.pipeline_id, iters, + request_id.as_ref().map(Deref::deref), false)); process_response_headers(&response, &doc_url, &http_state.cookie_jar, &http_state.hsts_list, &load_data); @@ -1092,7 +1095,7 @@ pub fn load<A, B>(load_data: &LoadData, if let Some(pipeline_id) = load_data.pipeline_id { if let Some(ref chan) = devtools_chan { send_response_to_devtools( - &chan, request_id, + &chan, request_id.unwrap(), metadata.headers.clone().map(Serde::into_inner), metadata.status.clone().map(Serde::into_inner), pipeline_id); |