diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2017-08-30 17:52:18 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2017-09-05 17:07:15 +0200 |
commit | fb843c251aff388c31f22d668319e04ad52d9663 (patch) | |
tree | 162709540b38cc4ef873cf195344f885dc84b39b /components/script/dom/workerglobalscope.rs | |
parent | 449ffb23acdd0098193458856de88ec4198724fc (diff) | |
download | servo-fb843c251aff388c31f22d668319e04ad52d9663.tar.gz servo-fb843c251aff388c31f22d668319e04ad52d9663.zip |
Make Performance Timeline API work in Workers
Diffstat (limited to 'components/script/dom/workerglobalscope.rs')
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 2421df74dd1..cb199125d16 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -17,6 +17,7 @@ use dom::bindings::trace::RootedTraceableBox; use dom::crypto::Crypto; use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope; use dom::globalscope::GlobalScope; +use dom::performance::Performance; use dom::promise::Promise; use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope; use dom::window::{base64_atob, base64_btoa}; @@ -44,6 +45,8 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc::Receiver; use task_source::file_reading::FileReadingTaskSource; use task_source::networking::NetworkingTaskSource; +use task_source::performance_timeline::PerformanceTimelineTaskSource; +use time::precise_time_ns; use timers::{IsInterval, TimerCallback}; pub fn prepare_workerscope_init(global: &GlobalScope, @@ -89,6 +92,9 @@ pub struct WorkerGlobalScope { from_devtools_receiver: Receiver<DevtoolScriptControlMsg>, microtask_queue: MicrotaskQueue, + + navigation_start_precise: f64, + performance: MutNullableJS<Performance>, } impl WorkerGlobalScope { @@ -120,6 +126,8 @@ impl WorkerGlobalScope { from_devtools_sender: init.from_devtools_sender, from_devtools_receiver: from_devtools_receiver, microtask_queue: MicrotaskQueue::default(), + navigation_start_precise: precise_time_ns() as f64, + performance: Default::default(), } } @@ -320,6 +328,16 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { fn Fetch(&self, input: RequestOrUSVString, init: RootedTraceableBox<RequestInit>) -> Rc<Promise> { fetch::Fetch(self.upcast(), input, init) } + + // https://w3c.github.io/hr-time/#the-performance-attribute + fn Performance(&self) -> Root<Performance> { + self.performance.or_init(|| { + let global_scope = self.upcast::<GlobalScope>(); + Performance::new(global_scope, + 0 /* navigation start is not used in workers */, + self.navigation_start_precise) + }) + } } @@ -368,6 +386,10 @@ impl WorkerGlobalScope { NetworkingTaskSource(self.script_chan()) } + pub fn performance_timeline_task_source(&self) -> PerformanceTimelineTaskSource { + PerformanceTimelineTaskSource(self.script_chan()) + } + pub fn new_script_pair(&self) -> (Box<ScriptChan + Send>, Box<ScriptPort + Send>) { let dedicated = self.downcast::<DedicatedWorkerGlobalScope>(); if let Some(dedicated) = dedicated { |