diff options
author | Glenn Watson <gw@intuitionlibrary.com> | 2014-10-29 07:24:34 +1000 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2014-10-29 07:34:47 +1000 |
commit | 90d793cdc8e4247e6ba59cae746bd49fca550ed5 (patch) | |
tree | 1d82c1e79e4fac02ec138273faa68d7a3630a95d /components/util/task.rs | |
parent | 3aad350a648bd69ca3410011f6e7eccf5813cb31 (diff) | |
download | servo-90d793cdc8e4247e6ba59cae746bd49fca550ed5.tar.gz servo-90d793cdc8e4247e6ba59cae746bd49fca550ed5.zip |
Add task profiler, which works by instrumenting each task runtime when enabled.
Diffstat (limited to 'components/util/task.rs')
-rw-r--r-- | components/util/task.rs | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/components/util/task.rs b/components/util/task.rs index f38d87d0907..362edb6b517 100644 --- a/components/util/task.rs +++ b/components/util/task.rs @@ -7,17 +7,21 @@ use std::task; use std::comm::Sender; use std::task::TaskBuilder; use native::task::NativeTaskBuilder; - +use rtinstrument; use task_state; pub fn spawn_named<S: IntoMaybeOwned<'static>>(name: S, f: proc():Send) { let builder = task::TaskBuilder::new().named(name); - builder.spawn(f); + builder.spawn(proc() { + rtinstrument::instrument(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); + builder.spawn(proc() { + rtinstrument::instrument(f); + }); } /// Arrange to send a particular message to a channel if the task fails. @@ -29,7 +33,7 @@ pub fn spawn_named_with_send_on_failure<T: Send>(name: &'static str, native: bool) { let with_state = proc() { task_state::initialize(state); - f() + rtinstrument::instrument(f); }; let future_result = if native { @@ -41,12 +45,14 @@ pub fn spawn_named_with_send_on_failure<T: Send>(name: &'static str, let watched_name = name.to_string(); let watcher_name = format!("{:s}Watcher", watched_name); TaskBuilder::new().named(watcher_name).spawn(proc() { - match future_result.unwrap() { - Ok(()) => (), - Err(..) => { - debug!("{:s} failed, notifying constellation", name); - dest.send(msg); + rtinstrument::instrument(proc() { + match future_result.unwrap() { + Ok(()) => (), + Err(..) => { + debug!("{:s} failed, notifying constellation", name); + dest.send(msg); + } } - } + }); }); } |