Skip to content

Commit

Permalink
Lessen pressure on the thread-local RNG
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
nox committed Aug 16, 2016
1 parent cb01d37 commit 6cc862d
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
9 changes: 6 additions & 3 deletions components/net/fetch/methods.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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();
Expand Down Expand Up @@ -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);
Expand Down
17 changes: 10 additions & 7 deletions components/net/http_loader.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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,
Expand All @@ -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);

Expand Down Expand Up @@ -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);
Expand Down
2 changes: 0 additions & 2 deletions tests/wpt/metadata/html/dom/reflection-embedded.html.ini
@@ -1,7 +1,5 @@
[reflection-embedded.html]
type: testharness
disabled:
if os == "mac": https://github.com/servo/servo/issues/11100
[img.dir: typeof IDL attribute]
expected: FAIL

Expand Down

0 comments on commit 6cc862d

Please sign in to comment.