diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2016-10-01 04:00:23 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2016-10-06 20:59:12 +0200 |
commit | ae3763e7b35fd4836d28b396ef4fa8abda0912d1 (patch) | |
tree | c8a7486829bb1d10bbd0baca2699df1a3fa3ad4e | |
parent | bfa7d045d0c83bf44acedd425262e39d29c0bffa (diff) | |
download | servo-ae3763e7b35fd4836d28b396ef4fa8abda0912d1.tar.gz servo-ae3763e7b35fd4836d28b396ef4fa8abda0912d1.zip |
Introduce GlobalScope::time_profiler_chan
-rw-r--r-- | components/script/dom/bindings/global.rs | 10 | ||||
-rw-r--r-- | components/script/dom/globalscope.rs | 15 | ||||
-rw-r--r-- | components/script/dom/servohtmlparser.rs | 4 | ||||
-rw-r--r-- | components/script/dom/window.rs | 12 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 15 |
5 files changed, 23 insertions, 33 deletions
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs index adb0df51c61..4e433477a39 100644 --- a/components/script/dom/bindings/global.rs +++ b/components/script/dom/bindings/global.rs @@ -89,14 +89,6 @@ impl<'a> GlobalRef<'a> { } } - /// Get a `time::ProfilerChan` to send messages to the time profiler thread. - pub fn time_profiler_chan(&self) -> &time::ProfilerChan { - match *self { - GlobalRef::Window(window) => window.time_profiler_chan(), - GlobalRef::Worker(worker) => worker.time_profiler_chan(), - } - } - /// Get a `IpcSender` to send messages to the constellation when available. pub fn constellation_chan(&self) -> &IpcSender<ConstellationMsg> { match *self { @@ -214,7 +206,7 @@ impl<'a> GlobalRef<'a> { time::profile( time::ProfilerCategory::ScriptEvaluate, Some(metadata), - self.time_profiler_chan().clone(), + self.as_global_scope().time_profiler_chan().clone(), || { let cx = self.get_cx(); let globalhandle = self.reflector().get_jsobject(); diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index 02409edc080..ac8cef37c43 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -11,7 +11,7 @@ use dom::crypto::Crypto; use dom::eventtarget::EventTarget; use ipc_channel::ipc::IpcSender; use js::jsapi::{JS_GetContext, JS_GetObjectRuntime, JSContext}; -use profile_traits::mem; +use profile_traits::{mem, time}; use std::cell::Cell; use std::collections::HashMap; use std::collections::hash_map::Entry; @@ -37,12 +37,17 @@ pub struct GlobalScope { /// For sending messages to the memory profiler. #[ignore_heap_size_of = "channels are hard"] mem_profiler_chan: mem::ProfilerChan, + + /// For sending messages to the time profiler. + #[ignore_heap_size_of = "channels are hard"] + time_profiler_chan: time::ProfilerChan, } impl GlobalScope { pub fn new_inherited( devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, - mem_profiler_chan: mem::ProfilerChan) + mem_profiler_chan: mem::ProfilerChan, + time_profiler_chan: time::ProfilerChan) -> Self { GlobalScope { eventtarget: EventTarget::new_inherited(), @@ -52,6 +57,7 @@ impl GlobalScope { console_timers: DOMRefCell::new(Default::default()), devtools_chan: devtools_chan, mem_profiler_chan: mem_profiler_chan, + time_profiler_chan: time_profiler_chan, } } @@ -117,6 +123,11 @@ impl GlobalScope { pub fn mem_profiler_chan(&self) -> &mem::ProfilerChan { &self.mem_profiler_chan } + + /// Get a sender to the time profiler thread. + pub fn time_profiler_chan(&self) -> &time::ProfilerChan { + &self.time_profiler_chan + } } fn timestamp_in_ms(time: Timespec) -> u64 { diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs index 0f0976d0f78..a65d9e84a6d 100644 --- a/components/script/dom/servohtmlparser.rs +++ b/components/script/dom/servohtmlparser.rs @@ -11,12 +11,14 @@ use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; use dom::bindings::codegen::Bindings::HTMLImageElementBinding::HTMLImageElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::codegen::Bindings::ServoHTMLParserBinding; +use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, Root}; use dom::bindings::refcounted::Trusted; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::bindings::trace::JSTraceable; use dom::document::Document; +use dom::globalscope::GlobalScope; use dom::htmlimageelement::HTMLImageElement; use dom::node::Node; use dom::window::Window; @@ -343,7 +345,7 @@ impl ServoHTMLParser { }; profile(ProfilerCategory::ScriptParseHTML, Some(metadata), - self.document.window().time_profiler_chan().clone(), + self.document.window().upcast::<GlobalScope>().time_profiler_chan().clone(), || self.do_parse_sync()) } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 848f6b0d72f..57aeada88a5 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -174,10 +174,6 @@ pub struct Window { scheduler_chan: IpcSender<TimerEventRequest>, timers: OneshotTimers, - /// For sending messages to the memory profiler. - #[ignore_heap_size_of = "channels are hard"] - time_profiler_chan: ProfilerChan, - /// For sending timeline markers. Will be ignored if /// no devtools server devtools_markers: DOMRefCell<HashSet<TimelineMarkerType>>, @@ -1376,10 +1372,6 @@ impl Window { &self.resource_threads } - pub fn time_profiler_chan(&self) -> &ProfilerChan { - &self.time_profiler_chan - } - pub fn layout_chan(&self) -> &Sender<Msg> { &self.layout_chan } @@ -1593,7 +1585,8 @@ impl Window { }; let current_time = time::get_time(); let win = box Window { - globalscope: GlobalScope::new_inherited(devtools_chan, mem_profiler_chan), + globalscope: + GlobalScope::new_inherited(devtools_chan, mem_profiler_chan, time_profiler_chan), script_chan: script_chan, dom_manipulation_task_source: dom_task_source, user_interaction_task_source: user_task_source, @@ -1603,7 +1596,6 @@ impl Window { image_cache_chan: image_cache_chan, navigator: Default::default(), image_cache_thread: image_cache_thread, - time_profiler_chan: time_profiler_chan, history: Default::default(), browsing_context: Default::default(), performance: Default::default(), diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 071b68fa274..f9757a976ef 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -35,7 +35,6 @@ use js::rust::Runtime; use msg::constellation_msg::{PipelineId, ReferrerPolicy}; use net_traits::{IpcSend, LoadOrigin}; use net_traits::{LoadContext, ResourceThreads, load_whole_resource}; -use profile_traits::time; use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, maybe_take_panic_result}; use script_runtime::{ScriptThreadEventCategory, PromiseJobQueue, EnqueuedPromiseCallback}; use script_thread::{Runnable, RunnableWrapper}; @@ -59,11 +58,12 @@ pub fn prepare_workerscope_init(global: GlobalRef, let worker_id = global_scope.get_next_worker_id(); let to_devtools_sender = global_scope.devtools_chan().cloned(); let mem_profiler_chan = global_scope.mem_profiler_chan().clone(); + let time_profiler_chan = global_scope.time_profiler_chan().clone(); let init = WorkerGlobalScopeInit { resource_threads: global.resource_threads(), mem_profiler_chan: mem_profiler_chan, to_devtools_sender: to_devtools_sender, - time_profiler_chan: global.time_profiler_chan().clone(), + time_profiler_chan: time_profiler_chan, from_devtools_sender: devtools_sender, constellation_chan: global.constellation_chan().clone(), scheduler_chan: global.scheduler_chan().clone(), @@ -92,9 +92,6 @@ pub struct WorkerGlobalScope { navigator: MutNullableHeap<JS<WorkerNavigator>>, timers: OneshotTimers, - #[ignore_heap_size_of = "Defined in std"] - time_profiler_chan: time::ProfilerChan, - #[ignore_heap_size_of = "Defined in ipc-channel"] /// Optional `IpcSender` for sending the `DevtoolScriptControlMsg` /// to the server from within the worker @@ -127,7 +124,8 @@ impl WorkerGlobalScope { -> WorkerGlobalScope { WorkerGlobalScope { globalscope: - GlobalScope::new_inherited(init.to_devtools_sender, init.mem_profiler_chan), + GlobalScope::new_inherited( + init.to_devtools_sender, init.mem_profiler_chan, init.time_profiler_chan), worker_id: init.worker_id, pipeline_id: init.pipeline_id, worker_url: worker_url, @@ -137,7 +135,6 @@ impl WorkerGlobalScope { location: Default::default(), navigator: Default::default(), timers: OneshotTimers::new(timer_event_chan, init.scheduler_chan.clone()), - time_profiler_chan: init.time_profiler_chan, from_devtools_sender: init.from_devtools_sender, from_devtools_receiver: from_devtools_receiver, constellation_chan: init.constellation_chan, @@ -147,10 +144,6 @@ impl WorkerGlobalScope { } } - pub fn time_profiler_chan(&self) -> &time::ProfilerChan { - &self.time_profiler_chan - } - pub fn from_devtools_sender(&self) -> Option<IpcSender<DevtoolScriptControlMsg>> { self.from_devtools_sender.clone() } |