Replace fetch_async() by a new fetch() function.

fetch() returns immediately after processing EOF, at the latest, so not
spinning up a thread should not cause noticeable delays. OTOH, it might
reduce the contention for cores, and reduce the overall time needed.
This commit is contained in:
Ms2ger 2016-12-02 12:04:49 +01:00
parent 9d9f048b3b
commit c03cd45258
2 changed files with 13 additions and 24 deletions

View file

@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use {DEFAULT_USER_AGENT, FetchResponseCollector, new_fetch_context, fetch_async, fetch_sync, make_server};
use {DEFAULT_USER_AGENT, new_fetch_context, fetch, fetch_sync, make_server};
use devtools_traits::DevtoolsControlMsg;
use devtools_traits::HttpRequest as DevtoolsHttpRequest;
use devtools_traits::HttpResponse as DevtoolsHttpResponse;
@ -678,13 +678,8 @@ fn test_fetch_async_returns_complete_response() {
let request = Request::new(url, Some(origin), false, None);
*request.referrer.borrow_mut() = Referrer::NoReferrer;
let (tx, rx) = channel();
let listener = Box::new(FetchResponseCollector {
sender: tx.clone()
});
let fetch_response = fetch(request, None);
fetch_async(request, listener, None);
let fetch_response = rx.recv().unwrap();
let _ = server.close();
assert_eq!(response_is_done(&fetch_response), true);
@ -703,13 +698,8 @@ fn test_opaque_filtered_fetch_async_returns_complete_response() {
let request = Request::new(url, Some(origin), false, None);
*request.referrer.borrow_mut() = Referrer::NoReferrer;
let (tx, rx) = channel();
let listener = Box::new(FetchResponseCollector {
sender: tx.clone()
});
let fetch_response = fetch(request, None);
fetch_async(request, listener, None);
let fetch_response = rx.recv().unwrap();
let _ = server.close();
assert_eq!(fetch_response.response_type, ResponseType::Opaque);
@ -744,13 +734,8 @@ fn test_opaque_redirect_filtered_fetch_async_returns_complete_response() {
*request.referrer.borrow_mut() = Referrer::NoReferrer;
request.redirect_mode.set(RedirectMode::Manual);
let (tx, rx) = channel();
let listener = Box::new(FetchResponseCollector {
sender: tx.clone()
});
let fetch_response = fetch(request, None);
fetch_async(request, listener, None);
let fetch_response = rx.recv().unwrap();
let _ = server.close();
assert_eq!(fetch_response.response_type, ResponseType::OpaqueRedirect);

View file

@ -44,8 +44,7 @@ use net_traits::request::Request;
use net_traits::response::Response;
use servo_url::ServoUrl;
use std::rc::Rc;
use std::sync::mpsc::Sender;
use std::thread;
use std::sync::mpsc::{Sender, channel};
const DEFAULT_USER_AGENT: &'static str = "Such Browser. Very Layout. Wow.";
@ -72,10 +71,15 @@ impl FetchTaskTarget for FetchResponseCollector {
}
}
fn fetch_async(request: Request, target: Box<FetchTaskTarget + Send>, dc: Option<Sender<DevtoolsControlMsg>>) {
thread::spawn(move || {
methods::fetch(Rc::new(request), &mut Some(target), &new_fetch_context(dc));
fn fetch(request: Request, dc: Option<Sender<DevtoolsControlMsg>>) -> Response {
let (sender, receiver) = channel();
let target = Box::new(FetchResponseCollector {
sender: sender,
});
methods::fetch(Rc::new(request), &mut Some(target), &new_fetch_context(dc));
receiver.recv().unwrap()
}
fn fetch_sync(request: Request, dc: Option<Sender<DevtoolsControlMsg>>) -> Response {