aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-08-06 17:43:09 -0600
committerbors-servo <metajack+bors@gmail.com>2015-08-06 17:43:09 -0600
commit76b4bae6ee45317f2ca0aefbc48b89169d2450c8 (patch)
tree4a991d818f3940af72f9cb3410b6212cea3803be /components/script/script_task.rs
parentb21584c862f8831dfb40e9cf0495bf04bc6ae1b5 (diff)
parent2114ffd0b9742784d2723aad3a7c163e8d06b040 (diff)
downloadservo-76b4bae6ee45317f2ca0aefbc48b89169d2450c8.tar.gz
servo-76b4bae6ee45317f2ca0aefbc48b89169d2450c8.zip
Auto merge of #7054 - Manishearth:rollup, r=Manishearth
Rollup of 3 pull requests - Successful merges: #7028, #7034, #7039 - Failed merges: <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7054) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs28
1 files changed, 10 insertions, 18 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 832024a1c03..9b57e9283b5 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -73,7 +73,7 @@ use net_traits::LoadData as NetLoadData;
use net_traits::{AsyncResponseTarget, ResourceTask, LoadConsumer, ControlMsg, Metadata};
use net_traits::image_cache_task::{ImageCacheChan, ImageCacheTask, ImageCacheResult};
use net_traits::storage_task::StorageTask;
-use profile_traits::mem::{self, Report, Reporter, ReporterRequest, ReportKind, ReportsChan};
+use profile_traits::mem::{self, Report, ReportKind, ReportsChan, OpaqueSender};
use string_cache::Atom;
use util::str::DOMString;
use util::task::spawn_named_with_send_on_failure;
@@ -216,6 +216,12 @@ pub trait ScriptChan {
fn clone(&self) -> Box<ScriptChan+Send>;
}
+impl OpaqueSender<ScriptMsg> for Box<ScriptChan+Send> {
+ fn send(&self, msg: ScriptMsg) {
+ ScriptChan::send(&**self, msg).unwrap();
+ }
+}
+
/// An interface for receiving ScriptMsg values in an event loop. Used for synchronous DOM
/// APIs that need to abstract over multiple kinds of event loops (worker/main thread) with
/// different Receiver interfaces.
@@ -437,24 +443,10 @@ impl ScriptTaskFactory for ScriptTask {
load_data.url.clone());
script_task.start_page_load(new_load, load_data);
- // Register this task as a memory reporter.
let reporter_name = format!("script-reporter-{}", id.0);
- let (reporter_sender, reporter_receiver) = ipc::channel().unwrap();
- ROUTER.add_route(reporter_receiver.to_opaque(), box move |reporter_request| {
- // Just injects an appropriate event into the worker task's queue.
- let reporter_request: ReporterRequest = reporter_request.to().unwrap();
- channel_for_reporter.send(ScriptMsg::CollectReports(
- reporter_request.reports_channel)).unwrap()
- });
- let reporter = Reporter(reporter_sender);
- let msg = mem::ProfilerMsg::RegisterReporter(reporter_name.clone(), reporter);
- mem_profiler_chan.send(msg);
-
- script_task.start();
-
- // Unregister this task as a memory reporter.
- let msg = mem::ProfilerMsg::UnregisterReporter(reporter_name);
- mem_profiler_chan.send(msg);
+ mem_profiler_chan.run_with_memory_reporting(|| {
+ script_task.start();
+ }, reporter_name, channel_for_reporter, ScriptMsg::CollectReports);
// This must always be the very last operation performed before the task completes
failsafe.neuter();