aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-01-13 12:11:35 -0800
committerbors-servo <release+servo@mozilla.com>2014-01-13 12:11:35 -0800
commit563d6ef91a43a4ebefb87281db7e4813d2afcee6 (patch)
tree696d330175cf5e50015d0e73aaa609642d7e05fa /src
parent0555e671cad9ba1e6eca85c02bf55036413432c6 (diff)
parent193b6d26359515ade0f5449004649deeea003949 (diff)
downloadservo-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.rs2
-rw-r--r--src/components/gfx/render_task.rs4
-rw-r--r--src/components/main/constellation.rs3
-rw-r--r--src/components/main/css/matching.rs3
-rw-r--r--src/components/main/layout/layout_task.rs3
-rw-r--r--src/components/main/util/task.rs10
-rw-r--r--src/components/net/file_loader.rs3
-rw-r--r--src/components/net/http_loader.rs3
-rw-r--r--src/components/net/image_cache_task.rs6
-rw-r--r--src/components/net/local_image_cache.rs4
-rw-r--r--src/components/net/resource_task.rs2
-rw-r--r--src/components/net/util.rs6
-rw-r--r--src/components/script/dom/window.rs5
-rw-r--r--src/components/script/html/cssparse.rs3
-rw-r--r--src/components/script/html/hubbub_html_parser.rs5
-rw-r--r--src/components/script/script_task.rs3
-rw-r--r--src/components/util/task.rs11
-rw-r--r--src/components/util/time.rs9
-rw-r--r--src/components/util/util.rc1
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;