mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
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:
parent
9d9f048b3b
commit
c03cd45258
2 changed files with 13 additions and 24 deletions
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue