diff options
author | bors-servo <release+servo@mozilla.com> | 2014-01-13 12:11:35 -0800 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-01-13 12:11:35 -0800 |
commit | 563d6ef91a43a4ebefb87281db7e4813d2afcee6 (patch) | |
tree | 696d330175cf5e50015d0e73aaa609642d7e05fa /src | |
parent | 0555e671cad9ba1e6eca85c02bf55036413432c6 (diff) | |
parent | 193b6d26359515ade0f5449004649deeea003949 (diff) | |
download | servo-563d6ef91a43a4ebefb87281db7e4813d2afcee6.tar.gz servo-563d6ef91a43a4ebefb87281db7e4813d2afcee6.zip |
auto merge of #1457 : zmike/servo/master, r=jdm
this should resolve #1169
Diffstat (limited to 'src')
-rw-r--r-- | src/components/gfx/font.rs | 2 | ||||
-rw-r--r-- | src/components/gfx/render_task.rs | 4 | ||||
-rw-r--r-- | src/components/main/constellation.rs | 3 | ||||
-rw-r--r-- | src/components/main/css/matching.rs | 3 | ||||
-rw-r--r-- | src/components/main/layout/layout_task.rs | 3 | ||||
-rw-r--r-- | src/components/main/util/task.rs | 10 | ||||
-rw-r--r-- | src/components/net/file_loader.rs | 3 | ||||
-rw-r--r-- | src/components/net/http_loader.rs | 3 | ||||
-rw-r--r-- | src/components/net/image_cache_task.rs | 6 | ||||
-rw-r--r-- | src/components/net/local_image_cache.rs | 4 | ||||
-rw-r--r-- | src/components/net/resource_task.rs | 2 | ||||
-rw-r--r-- | src/components/net/util.rs | 6 | ||||
-rw-r--r-- | src/components/script/dom/window.rs | 5 | ||||
-rw-r--r-- | src/components/script/html/cssparse.rs | 3 | ||||
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 5 | ||||
-rw-r--r-- | src/components/script/script_task.rs | 3 | ||||
-rw-r--r-- | src/components/util/task.rs | 11 | ||||
-rw-r--r-- | src/components/util/time.rs | 9 | ||||
-rw-r--r-- | src/components/util/util.rc | 1 |
19 files changed, 55 insertions, 31 deletions
diff --git a/src/components/gfx/font.rs b/src/components/gfx/font.rs index 9c1e729bc12..ec9c9889a54 100644 --- a/src/components/gfx/font.rs +++ b/src/components/gfx/font.rs @@ -494,7 +494,7 @@ fn should_get_glyph_advance_stress() { for iter::repeat(100) { let (chan, port) = pipes::stream(); ports += [@port]; - do task::spawn { + spawn_named("should_get_glyph_advance_stress") { let fctx = @FontContext(); let matcher = @FontMatcher(fctx); let _font = matcher.get_test_font(); diff --git a/src/components/gfx/render_task.rs b/src/components/gfx/render_task.rs index 0f1dd7913c9..a17970e18d3 100644 --- a/src/components/gfx/render_task.rs +++ b/src/components/gfx/render_task.rs @@ -18,6 +18,7 @@ use servo_msg::constellation_msg::{ConstellationChan, PipelineId, RendererReadyM use servo_msg::platform::surface::NativeSurfaceAzureMethods; use servo_util::time::{ProfilerChan, profile}; use servo_util::time; +use servo_util::task::spawn_named; use std::comm::{Chan, Port, SharedChan}; use extra::arc::Arc; @@ -145,7 +146,8 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> { opts: Opts, profiler_chan: ProfilerChan, shutdown_chan: Chan<()>) { - spawn(proc() { + spawn_named("RenderTask", proc() { + { // Ensures RenderTask and graphics context are destroyed before shutdown msg let native_graphics_context = compositor.get_graphics_metadata().map( |md| NativePaintingGraphicsContext::from_metadata(&md)); diff --git a/src/components/main/constellation.rs b/src/components/main/constellation.rs index 66303f41545..f2a4b16e2c4 100644 --- a/src/components/main/constellation.rs +++ b/src/components/main/constellation.rs @@ -20,6 +20,7 @@ use servo_net::resource_task::ResourceTask; use servo_net::resource_task; use servo_util::time::ProfilerChan; use servo_util::url::make_url; +use servo_util::task::spawn_named; use std::hashmap::{HashMap, HashSet}; use std::util::replace; @@ -259,7 +260,7 @@ impl Constellation { let (constellation_port, constellation_chan) = ConstellationChan::new(); let constellation_chan_clone = constellation_chan.clone(); let opts_clone = opts.clone(); - spawn(proc() { + spawn_named("Constellation", proc() { let mut constellation = Constellation { chan: constellation_chan_clone, request_port: constellation_port, diff --git a/src/components/main/css/matching.rs b/src/components/main/css/matching.rs index f25f92874c1..05043e23f7f 100644 --- a/src/components/main/css/matching.rs +++ b/src/components/main/css/matching.rs @@ -8,6 +8,7 @@ use css::node_style::StyledNode; use layout::incremental; use layout::util::LayoutDataAccess; use layout::wrapper::LayoutNode; +use servo_util::task::spawn_named; use extra::arc::{Arc, RWArc}; use std::cast; @@ -75,7 +76,7 @@ impl<'ln> MatchMethods for LayoutNode<'ln> { }; let evil = Some(evil); - spawn(proc() { + spawn_named("MatchMethods for LayoutNode", proc() { let mut evil = evil; let nodes: ~[LayoutNode] = unsafe { cast::transmute(evil.take_unwrap()) diff --git a/src/components/main/layout/layout_task.rs b/src/components/main/layout/layout_task.rs index 740576617fd..1810ff38772 100644 --- a/src/components/main/layout/layout_task.rs +++ b/src/components/main/layout/layout_task.rs @@ -44,6 +44,7 @@ use servo_net::local_image_cache::{ImageResponder, LocalImageCache}; use servo_util::geometry::Au; use servo_util::time::{ProfilerChan, profile}; use servo_util::time; +use servo_util::task::spawn_named; use std::cast::transmute; use std::cast; use std::cell::RefCell; @@ -210,7 +211,7 @@ impl LayoutTask { opts: Opts, profiler_chan: ProfilerChan, shutdown_chan: Chan<()>) { - spawn(proc() { + spawn_named("LayoutTask", proc() { { // Ensures layout task is destroyed before we send shutdown message let mut layout = LayoutTask::new(id, port, diff --git a/src/components/main/util/task.rs b/src/components/main/util/task.rs index f85688f7d2f..c198e5ca49b 100644 --- a/src/components/main/util/task.rs +++ b/src/components/main/util/task.rs @@ -2,9 +2,11 @@ * 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/. */ -pub fn spawn_listener<A: Send>(f: proc(Port<A>)) -> Chan<A> { +use servo_util::task::spawn_named; + +pub fn spawn_listener<A: Send, S: IntoSendStr>(name: S, f: proc(Port<A>)) -> Chan<A> { let (setup_po, setup_ch) = Chan::new(); - spawn(proc() { + spawn_named(name, proc() { let (po, ch) = Chan::new(); setup_ch.send(ch); f(po); @@ -12,9 +14,9 @@ pub fn spawn_listener<A: Send>(f: proc(Port<A>)) -> Chan<A> { setup_po.recv() } -pub fn spawn_conversation<A: Send, B: Send>(f: proc(Port<A>, Chan<B>)) -> (Port<B>, Chan<A>) { +pub fn spawn_conversation<A: Send, B: Send, S: IntoSendStr>(name: S, f: proc(Port<A>, Chan<B>)) -> (Port<B>, Chan<A>) { let (from_child, to_parent) = Chan::new(); - let to_child = do spawn_listener |from_parent| { + let to_child = do spawn_listener(name) |from_parent| { f(from_parent, to_parent) }; (from_child, to_child) diff --git a/src/components/net/file_loader.rs b/src/components/net/file_loader.rs index 67690b6547a..4a63ac5dcf0 100644 --- a/src/components/net/file_loader.rs +++ b/src/components/net/file_loader.rs @@ -7,6 +7,7 @@ use servo_util::io::result; use std::io; use std::io::File; +use servo_util::task::spawn_named; static READ_SIZE: uint = 1024; @@ -30,7 +31,7 @@ pub fn factory() -> LoaderTask { let f: LoaderTask = proc(url, start_chan) { assert!("file" == url.scheme); let progress_chan = start_sending(start_chan, Metadata::default(url.clone())); - spawn(proc() { + spawn_named("file_loader", proc() { // ignore_io_error causes us to get None instead of a task failure. let _guard = io::ignore_io_error(); match File::open_mode(&Path::new(url.path), io::Open, io::Read) { diff --git a/src/components/net/http_loader.rs b/src/components/net/http_loader.rs index 79b34778245..386d7d814f2 100644 --- a/src/components/net/http_loader.rs +++ b/src/components/net/http_loader.rs @@ -10,10 +10,11 @@ use http::client::RequestWriter; use http::method::Get; use http::headers::HeaderEnum; use std::io::Reader; +use servo_util::task::spawn_named; pub fn factory() -> LoaderTask { let f: LoaderTask = proc(url, start_chan) { - spawn(proc() load(url, start_chan)) + spawn_named("http_loader", proc() load(url, start_chan)) }; f } diff --git a/src/components/net/image_cache_task.rs b/src/components/net/image_cache_task.rs index 8a99ccf4a2c..886eb10a681 100644 --- a/src/components/net/image_cache_task.rs +++ b/src/components/net/image_cache_task.rs @@ -492,7 +492,7 @@ mod tests { use servo_util::url::make_url; fn mock_resource_task(on_load: proc(resource: SharedChan<resource_task::ProgressMsg>)) -> ResourceTask { - spawn_listener(proc(port: Port<resource_task::ControlMsg>) { + spawn_listener("mock_resource_task", proc(port: Port<resource_task::ControlMsg>) { loop { match port.recv() { resource_task::Load(_, response) => { @@ -658,7 +658,7 @@ mod tests { let (resource_task_exited, resource_task_exited_chan) = Chan::new(); - let mock_resource_task = spawn_listener(proc(port: Port<resource_task::ControlMsg>) { + let mock_resource_task = spawn_listener("should_not...already_available", proc(port: Port<resource_task::ControlMsg>) { loop { match port.recv() { resource_task::Load(_, response) => { @@ -701,7 +701,7 @@ mod tests { let (resource_task_exited, resource_task_exited_chan) = Chan::new(); - let mock_resource_task = spawn_listener(proc(port: Port<resource_task::ControlMsg>) { + let mock_resource_task = spawn_listener("should_not...already_failed", proc(port: Port<resource_task::ControlMsg>) { loop { match port.recv() { resource_task::Load(_, response) => { diff --git a/src/components/net/local_image_cache.rs b/src/components/net/local_image_cache.rs index f6dd537e47f..8bbe56e03aa 100644 --- a/src/components/net/local_image_cache.rs +++ b/src/components/net/local_image_cache.rs @@ -12,9 +12,9 @@ use image_cache_task::{Decode, GetImage, ImageCacheTask, ImageFailed, ImageNotRe use image_cache_task::{ImageResponseMsg, Prefetch, WaitForImage}; use std::comm::Port; -use std::task; use servo_util::url::{UrlMap, url_map}; use extra::url::Url; +use servo_util::task::spawn_named; pub trait ImageResponder { fn respond(&self) -> proc(ImageResponseMsg); @@ -126,7 +126,7 @@ impl LocalImageCache { assert!(self.on_image_available.is_some()); let on_image_available = self.on_image_available.as_ref().unwrap().respond(); let url = (*url).clone(); - do task::spawn { + do spawn_named("LocalImageCache") { let (response_port, response_chan) = Chan::new(); image_cache_task.send(WaitForImage(url.clone(), response_chan)); on_image_available(response_port.recv()); diff --git a/src/components/net/resource_task.rs b/src/components/net/resource_task.rs index 53d5c3ea5ba..2513d610e52 100644 --- a/src/components/net/resource_task.rs +++ b/src/components/net/resource_task.rs @@ -135,7 +135,7 @@ pub fn ResourceTask() -> ResourceTask { } fn create_resource_task_with_loaders(loaders: ~[(~str, LoaderTaskFactory)]) -> ResourceTask { - let chan = spawn_listener(proc(from_client) { + let chan = spawn_listener("ResourceManager", proc(from_client) { // TODO: change copy to move once we can move out of closures ResourceManager(from_client, loaders).start() }); diff --git a/src/components/net/util.rs b/src/components/net/util.rs index 2fc4a940881..46a3e07009f 100644 --- a/src/components/net/util.rs +++ b/src/components/net/util.rs @@ -3,11 +3,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use std::comm::{Chan, Port}; -use std::task; +use servo_util::task::spawn_named; -pub fn spawn_listener<A: Send>(f: proc(Port<A>)) -> SharedChan<A> { +pub fn spawn_listener<A: Send, S: IntoSendStr>(name: S, f: proc(Port<A>)) -> SharedChan<A> { let (setup_port, setup_chan) = Chan::new(); - do task::spawn { + do spawn_named(name) { let (port, chan) = SharedChan::new(); setup_chan.send(chan); f(port); diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index f9ba483c4f9..bb0a39ae902 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -16,6 +16,7 @@ use layout_interface::{ReflowForDisplay, DocumentDamageLevel}; use script_task::{ExitWindowMsg, FireTimerMsg, Page, ScriptChan}; use servo_msg::compositor_msg::ScriptListener; use servo_net::image_cache_task::ImageCacheTask; +use servo_util::task::{spawn_named}; use js::glue::*; use js::jsapi::{JSObject, JSContext, JS_DefineProperty, JSTracer, JSVal}; @@ -193,7 +194,7 @@ impl Window { let tm = Timer::new().unwrap(); let (cancel_port, cancel_chan) = Chan::new(); let chan = self.timer_chan.clone(); - spawn(proc() { + spawn_named("Window:SetTimeout", proc() { let mut tm = tm; let mut timeout_port = tm.oneshot(timeout); let mut cancel_port = cancel_port; @@ -248,7 +249,7 @@ impl Window { timer_chan: { let (timer_port, timer_chan): (Port<TimerControlMsg>, SharedChan<TimerControlMsg>) = SharedChan::new(); let id = page.id.clone(); - spawn(proc() { + spawn_named("timer controller", proc() { loop { match timer_port.recv() { TimerMessage_Close => break, diff --git a/src/components/script/html/cssparse.rs b/src/components/script/html/cssparse.rs index 5f5ba17653b..0576ee5301a 100644 --- a/src/components/script/html/cssparse.rs +++ b/src/components/script/html/cssparse.rs @@ -9,6 +9,7 @@ use encoding::EncodingRef; use encoding::all::UTF_8; use style::Stylesheet; use servo_net::resource_task::{Load, LoadResponse, ProgressMsg, Payload, Done, ResourceTask}; +use servo_util::task::spawn_named; use extra::url::Url; /// Where a style sheet comes from. @@ -25,7 +26,7 @@ pub fn spawn_css_parser(provenance: StylesheetProvenance, // TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding let environment_encoding = UTF_8 as EncodingRef; - spawn(proc() { + spawn_named("cssparser", proc() { // TODO: CSS parsing should take a base URL. let _url = match provenance { UrlProvenance(ref the_url) => (*the_url).clone(), diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index c59ef9ab376..5d9e955714a 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -21,6 +21,7 @@ use servo_msg::constellation_msg::SubpageId; use servo_net::image_cache_task::ImageCacheTask; use servo_net::resource_task::{Load, Payload, Done, ResourceTask, load_whole_resource}; use servo_util::url::make_url; +use servo_util::task::spawn_named; use std::cast; use std::cell::RefCell; use std::comm::{Port, SharedChan}; @@ -255,7 +256,7 @@ pub fn parse_html(cx: *JSContext, let (discovery_port, discovery_chan) = SharedChan::new(); let stylesheet_chan = discovery_chan.clone(); let (css_msg_port, css_chan) = SharedChan::new(); - spawn(proc() { + spawn_named("parse_html:css", proc() { css_link_listener(stylesheet_chan, css_msg_port, resource_task2.clone()); }); @@ -263,7 +264,7 @@ pub fn parse_html(cx: *JSContext, let resource_task2 = resource_task.clone(); let js_result_chan = discovery_chan.clone(); let (js_msg_port, js_chan) = SharedChan::new(); - spawn(proc() { + spawn_named("parse_html:js", proc() { js_script_listener(js_result_chan, js_msg_port, resource_task2.clone()); }); diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 4b70c13f0cc..faec6d8031b 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -46,6 +46,7 @@ use servo_net::image_cache_task::ImageCacheTask; use servo_net::resource_task::ResourceTask; use servo_util::geometry::to_frac_px; use servo_util::url::make_url; +use servo_util::task::spawn_named; use std::comm::{Port, SharedChan}; use std::ptr; use std::str::eq_slice; @@ -462,7 +463,7 @@ impl ScriptTask { resource_task: ResourceTask, image_cache_task: ImageCacheTask, window_size: Size2D<uint>) { - spawn(proc() { + spawn_named("ScriptTask", proc() { let script_task = ScriptTask::new(id, @compositor as @ScriptListener, layout_chan, diff --git a/src/components/util/task.rs b/src/components/util/task.rs new file mode 100644 index 00000000000..20dc2b6ad6f --- /dev/null +++ b/src/components/util/task.rs @@ -0,0 +1,11 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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 std::task; + +pub fn spawn_named<S: IntoSendStr>(name: S, f: proc()) { + let mut builder = task::task(); + builder.name(name); + builder.spawn(f); +} diff --git a/src/components/util/time.rs b/src/components/util/time.rs index 59b01d264e7..911100bcb36 100644 --- a/src/components/util/time.rs +++ b/src/components/util/time.rs @@ -8,7 +8,7 @@ use extra::time::precise_time_ns; use extra::treemap::TreeMap; use std::comm::{Port, SharedChan}; use std::iter::AdditiveIterator; - +use task::{spawn_named}; // TODO: This code should be changed to use the commented code that uses timers // directly, once native timers land in Rust. @@ -26,7 +26,6 @@ impl Timer { } } - // front-end representation of the profiler used to communicate with the profiler #[deriving(Clone)] pub struct ProfilerChan(SharedChan<ProfilerMsg>); @@ -117,7 +116,7 @@ impl Profiler { Some(period) => { let period = (period * 1000f64) as u64; let chan = chan.clone(); - spawn(proc() { + spawn_named("Profiler timer", proc() { loop { Timer::sleep(period); if !chan.try_send(PrintMsg) { @@ -126,14 +125,14 @@ impl Profiler { } }); // Spawn the profiler - spawn(proc() { + spawn_named("Profiler", proc() { let mut profiler = Profiler::new(port); profiler.start(); }); } None => { // no-op to handle profiler messages when the profiler is inactive - spawn(proc() { + spawn_named("Profiler", proc() { while port.recv_opt().is_some() {} }); } diff --git a/src/components/util/util.rc b/src/components/util/util.rc index 9830de81d1a..c427e18eff0 100644 --- a/src/components/util/util.rc +++ b/src/components/util/util.rc @@ -18,3 +18,4 @@ pub mod url; pub mod vec; pub mod debug; pub mod io; +pub mod task; |