aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2016-08-16 10:11:33 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2016-08-16 10:12:33 +0200
commit6cc862d0c654ee5c40758b34a66fb85bbda8a250 (patch)
tree9e20641bfe69840fe429d44d81d1aa8403808ecf /components
parentcb01d37338ed65c9d1e32dc620d67a7ea8cbadcf (diff)
downloadservo-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.rs9
-rw-r--r--components/net/http_loader.rs17
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);