diff options
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | components/canvas/Cargo.toml | 3 | ||||
-rw-r--r-- | components/canvas/canvas_render_task.rs | 5 | ||||
-rw-r--r-- | components/canvas/lib.rs | 1 | ||||
-rw-r--r-- | components/devtools/Cargo.toml | 3 | ||||
-rw-r--r-- | components/devtools/lib.rs | 7 | ||||
-rw-r--r-- | components/gfx/font_cache_task.rs | 3 | ||||
-rw-r--r-- | components/net/image_cache_task.rs | 10 | ||||
-rw-r--r-- | components/net/resource_task.rs | 5 | ||||
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 8 | ||||
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 4 | ||||
-rw-r--r-- | components/util/task.rs | 5 | ||||
-rw-r--r-- | components/util/taskpool.rs | 8 | ||||
-rw-r--r-- | components/util/workqueue.rs | 20 |
14 files changed, 48 insertions, 36 deletions
diff --git a/Cargo.lock b/Cargo.lock index 459542ab7c6..e670b2b8956 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,7 @@ version = "0.0.1" dependencies = [ "azure 0.1.0 (git+https://github.com/servo/rust-azure#e151fa23f5cb3c1ef62b4d41bad9abdd1f4f3471)", "geom 0.1.0 (git+https://github.com/servo/rust-geom#b001a76e907befaae1d0d6dd259418a22092da86)", + "util 0.0.1", ] [[package]] @@ -112,6 +113,7 @@ version = "0.0.1" dependencies = [ "devtools_traits 0.0.1", "msg 0.0.1", + "util 0.0.1", ] [[package]] diff --git a/components/canvas/Cargo.toml b/components/canvas/Cargo.toml index 7b80f00f12d..8aba12c4b4b 100644 --- a/components/canvas/Cargo.toml +++ b/components/canvas/Cargo.toml @@ -12,3 +12,6 @@ git = "https://github.com/servo/rust-azure" [dependencies.geom] git = "https://github.com/servo/rust-geom" + +[dependencies.util] +path = "../util"
\ No newline at end of file diff --git a/components/canvas/canvas_render_task.rs b/components/canvas/canvas_render_task.rs index 8dacd11cdcc..a5ab92a2dfe 100644 --- a/components/canvas/canvas_render_task.rs +++ b/components/canvas/canvas_render_task.rs @@ -6,9 +6,9 @@ use azure::azure_hl::{DrawTarget, Color, B8G8R8A8, SkiaBackend, StrokeOptions, D use azure::azure_hl::{ColorPattern, ColorPatternRef}; use geom::rect::Rect; use geom::size::Size2D; +use servo_util::task::spawn_named; use std::comm; -use std::task::TaskBuilder; pub enum CanvasMsg { FillRect(Rect<f32>), @@ -37,8 +37,7 @@ impl CanvasRenderTask { pub fn start(size: Size2D<i32>) -> Sender<CanvasMsg> { let (chan, port) = comm::channel::<CanvasMsg>(); - let builder = TaskBuilder::new().named("CanvasTask"); - builder.spawn(proc() { + spawn_named("CanvasTask", proc() { let mut renderer = CanvasRenderTask::new(size); loop { diff --git a/components/canvas/lib.rs b/components/canvas/lib.rs index 21f49dd7c46..dd10bf89104 100644 --- a/components/canvas/lib.rs +++ b/components/canvas/lib.rs @@ -6,5 +6,6 @@ extern crate azure; extern crate geom; +extern crate "util" as servo_util; pub mod canvas_render_task; diff --git a/components/devtools/Cargo.toml b/components/devtools/Cargo.toml index 2984f9daf61..d7bd8e25f33 100644 --- a/components/devtools/Cargo.toml +++ b/components/devtools/Cargo.toml @@ -12,3 +12,6 @@ path = "../devtools_traits" [dependencies.msg] path = "../msg" + +[dependencies.util] +path = "../util"
\ No newline at end of file diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index e747bbf9594..dc37e5f8d0f 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -27,6 +27,7 @@ extern crate debug; extern crate serialize; extern crate sync; extern crate "msg" as servo_msg; +extern crate "util" as servo_util; use actor::{Actor, ActorRegistry}; use actors::console::ConsoleActor; @@ -37,6 +38,7 @@ use protocol::JsonPacketSender; use devtools_traits::{ServerExitMsg, DevtoolsControlMsg, NewGlobal, DevtoolScriptControlMsg}; use servo_msg::constellation_msg::PipelineId; +use servo_util::task::spawn_named; use std::cell::RefCell; use std::comm; @@ -44,7 +46,6 @@ use std::comm::{Disconnected, Empty}; use std::io::{TcpListener, TcpStream}; use std::io::{Acceptor, Listener, EndOfFile, TimedOut}; use std::num; -use std::task::TaskBuilder; use serialize::json; use sync::{Arc, Mutex}; @@ -61,7 +62,7 @@ mod protocol; /// Spin up a devtools server that listens for connections on the specified port. pub fn start_server(port: u16) -> Sender<DevtoolsControlMsg> { let (sender, receiver) = comm::channel(); - TaskBuilder::new().named("devtools").spawn(proc() { + spawn_named("devtools", proc() { run_server(receiver, port) }); sender @@ -193,7 +194,7 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) { Err(_e) => { /* connection failed */ } Ok(stream) => { let actors = actors.clone(); - spawn(proc() { + spawn_named("devtools-client-handler", proc() { // connection succeeded handle_client(actors, stream.clone()) }) diff --git a/components/gfx/font_cache_task.rs b/components/gfx/font_cache_task.rs index 9c3b537e0f3..ff557adf816 100644 --- a/components/gfx/font_cache_task.rs +++ b/components/gfx/font_cache_task.rs @@ -13,6 +13,7 @@ use sync::Arc; use font_template::{FontTemplate, FontTemplateDescriptor}; use platform::font_template::FontTemplateData; use servo_net::resource_task::{ResourceTask, load_whole_resource}; +use servo_util::task::spawn_named; use style::{Source, LocalSource, UrlSource_}; /// A list of font templates that make up a given font family. @@ -245,7 +246,7 @@ impl FontCacheTask { pub fn new(resource_task: ResourceTask) -> FontCacheTask { let (chan, port) = channel(); - spawn(proc() { + spawn_named("font-cache-task", proc() { // TODO: Allow users to specify these. let mut generic_fonts = HashMap::with_capacity(5); add_generic_font(&mut generic_fonts, "serif", "Times New Roman"); diff --git a/components/net/image_cache_task.rs b/components/net/image_cache_task.rs index 56ce7335048..e3e9bd952a6 100644 --- a/components/net/image_cache_task.rs +++ b/components/net/image_cache_task.rs @@ -6,11 +6,11 @@ use image::base::{Image, load_from_memory}; use resource_task; use resource_task::{LoadData, ResourceTask}; +use servo_util::task::spawn_named; use servo_util::taskpool::TaskPool; use std::comm::{channel, Receiver, Sender}; use std::collections::hashmap::HashMap; use std::mem::replace; -use std::task::spawn; use std::result; use sync::{Arc, Mutex}; use serialize::{Encoder, Encodable}; @@ -84,7 +84,7 @@ impl ImageCacheTask { let (chan, port) = channel(); let chan_clone = chan.clone(); - spawn(proc() { + spawn_named("image-cache-task", proc() { let mut cache = ImageCache { resource_task: resource_task, port: port, @@ -105,7 +105,7 @@ impl ImageCacheTask { pub fn new_sync(resource_task: ResourceTask, task_pool: TaskPool) -> ImageCacheTask { let (chan, port) = channel(); - spawn(proc() { + spawn_named("image-cache-task-sync", proc() { let inner_cache = ImageCacheTask::new(resource_task, task_pool); loop { @@ -248,7 +248,7 @@ impl ImageCache { let resource_task = self.resource_task.clone(); let url_clone = url.clone(); - spawn(proc() { + spawn_named("image-cache-task-prefetch", proc() { let url = url_clone; debug!("image_cache_task: started fetch for {:s}", url.serialize()); @@ -463,7 +463,7 @@ fn load_image_data(url: Url, resource_task: ResourceTask) -> Result<Vec<u8>, ()> pub fn spawn_listener<A: Send>(f: proc(Receiver<A>):Send) -> Sender<A> { let (setup_chan, setup_port) = channel(); - spawn(proc() { + spawn_named("image-cache-task-listener", proc() { let (chan, port) = channel(); setup_chan.send(chan); f(port); diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 4a148876be2..812b1d5d3d0 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -10,7 +10,6 @@ use file_loader; use http_loader; use std::comm::{channel, Receiver, Sender}; -use std::task::TaskBuilder; use http::headers::content_type::MediaType; use http::headers::response::HeaderCollection as ResponseHeaderCollection; use http::headers::request::HeaderCollection as RequestHeaderCollection; @@ -20,6 +19,7 @@ use url::Url; use http::status::Ok as StatusOk; use http::status::Status; +use servo_util::task::spawn_named; pub enum ControlMsg { /// Request the data associated with a particular URL @@ -166,8 +166,7 @@ pub type ResourceTask = Sender<ControlMsg>; /// Create a ResourceTask pub fn new_resource_task(user_agent: Option<String>) -> ResourceTask { let (setup_chan, setup_port) = channel(); - let builder = TaskBuilder::new().named("ResourceManager"); - builder.spawn(proc() { + spawn_named("ResourceManager", proc() { ResourceManager::new(setup_port, user_agent).start(); }); setup_chan diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 76c30db5b4c..33d2f956071 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -24,6 +24,7 @@ use script_task::WorkerPostMessage; use script_task::StackRootTLS; use servo_net::resource_task::{ResourceTask, load_whole_resource}; +use servo_util::task::spawn_named_native; use servo_util::task_state; use servo_util::task_state::{Script, InWorker}; @@ -34,8 +35,6 @@ use js::rust::Cx; use std::rc::Rc; use std::ptr; -use std::task::TaskBuilder; -use native::task::NativeTaskBuilder; use url::Url; #[dom_struct] @@ -88,10 +87,7 @@ impl DedicatedWorkerGlobalScope { parent_sender: ScriptChan, own_sender: ScriptChan, receiver: Receiver<ScriptMsg>) { - TaskBuilder::new() - .native() - .named(format!("Web Worker at {}", worker_url.serialize())) - .spawn(proc() { + spawn_named_native(format!("Web worker for {}", worker_url.serialize()), proc() { task_state::initialize(Script | InWorker); diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 120b4591fbe..3245ac210e5 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -57,7 +57,6 @@ use std::default::Default; use std::io::{BufReader, MemWriter, Timer}; use std::from_str::FromStr; use std::path::BytesContainer; -use std::task::TaskBuilder; use std::time::duration::Duration; use std::num::Zero; use time; @@ -549,10 +548,9 @@ impl<'a> XMLHttpRequestMethods for JSRef<'a, XMLHttpRequest> { return XMLHttpRequest::fetch(&mut Sync(self), resource_task, load_data, terminate_receiver, cors_request); } else { - let builder = TaskBuilder::new().named("XHRTask"); self.fetch_time.set(time::now().to_timespec().sec); let script_chan = global.root_ref().script_chan().clone(); - builder.spawn(proc() { + spawn_named("XHRTask", proc() { let _ = XMLHttpRequest::fetch(&mut Async(addr.unwrap(), script_chan), resource_task, load_data, terminate_receiver, cors_request); }); diff --git a/components/util/task.rs b/components/util/task.rs index f286efe5bc3..f38d87d0907 100644 --- a/components/util/task.rs +++ b/components/util/task.rs @@ -15,6 +15,11 @@ pub fn spawn_named<S: IntoMaybeOwned<'static>>(name: S, f: proc():Send) { builder.spawn(f); } +pub fn spawn_named_native<S: IntoMaybeOwned<'static>>(name: S, f: proc():Send) { + let builder = task::TaskBuilder::new().named(name).native(); + builder.spawn(f); +} + /// Arrange to send a particular message to a channel if the task fails. pub fn spawn_named_with_send_on_failure<T: Send>(name: &'static str, state: task_state::TaskState, diff --git a/components/util/taskpool.rs b/components/util/taskpool.rs index 0a2fafb2ab3..8521ef9dc93 100644 --- a/components/util/taskpool.rs +++ b/components/util/taskpool.rs @@ -15,6 +15,7 @@ // The only difference is that a normal channel is used instead of a sync_channel. // +use task::spawn_named; use std::sync::{Arc, Mutex}; pub struct TaskPool { @@ -28,9 +29,11 @@ impl TaskPool { let state = Arc::new(Mutex::new(rx)); - for _ in range(0, tasks) { + for i in range(0, tasks) { let state = state.clone(); - spawn(proc() worker(&*state)); + spawn_named( + format!("TaskPoolWorker {}/{}", i+1, tasks), + proc() worker(&*state)); } return TaskPool { tx: tx }; @@ -50,4 +53,3 @@ impl TaskPool { self.tx.send(job); } } - diff --git a/components/util/workqueue.rs b/components/util/workqueue.rs index 8708d8585a6..3a041e8ce37 100644 --- a/components/util/workqueue.rs +++ b/components/util/workqueue.rs @@ -7,16 +7,15 @@ //! Data associated with queues is simply a pair of unsigned integers. It is expected that a //! higher-level API on top of this could allow safe fork-join parallelism. +use task::spawn_named_native; use task_state; -use native::task::NativeTaskBuilder; +use libc::funcs::posix88::unistd::usleep; use rand::{Rng, XorShiftRng}; use std::mem; use std::rand::weak_rng; use std::sync::atomics::{AtomicUint, SeqCst}; use std::sync::deque::{Abort, BufferPool, Data, Empty, Stealer, Worker}; -use std::task::TaskBuilder; -use libc::funcs::posix88::unistd::usleep; /// A unit of work. /// @@ -247,12 +246,15 @@ impl<QueueData: Send, WorkData: Send> WorkQueue<QueueData, WorkData> { } // Spawn threads. - for thread in threads.into_iter() { - TaskBuilder::new().named(task_name).native().spawn(proc() { - task_state::initialize(state | task_state::InWorker); - let mut thread = thread; - thread.start() - }) + for (i, thread) in threads.into_iter().enumerate() { + + spawn_named_native( + format!("{} worker {}/{}", task_name, i+1, thread_count), + proc() { + task_state::initialize(state | task_state::InWorker); + let mut thread = thread; + thread.start() + }) } WorkQueue { |