aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/workerglobalscope.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2017-08-30 17:52:18 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2017-09-05 17:07:15 +0200
commitfb843c251aff388c31f22d668319e04ad52d9663 (patch)
tree162709540b38cc4ef873cf195344f885dc84b39b /components/script/dom/workerglobalscope.rs
parent449ffb23acdd0098193458856de88ec4198724fc (diff)
downloadservo-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.rs22
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 {