diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2019-11-26 16:26:20 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-26 16:26:20 -0500 |
commit | a922c497fade0250123b86d7535838c9a8d3b0af (patch) | |
tree | 58d60290dab73537d294c8a81dbef091279dc01a /components/script/dom/abstractworkerglobalscope.rs | |
parent | 8e0aa68aaafd96abc589f185f7f863f96c553e26 (diff) | |
parent | 50a7111eb65155fc7a0bdb1646c4a2e0ebdd8f90 (diff) | |
download | servo-a922c497fade0250123b86d7535838c9a8d3b0af.tar.gz servo-a922c497fade0250123b86d7535838c9a8d3b0af.zip |
Auto merge of #24758 - gterzian:impl_timer_task_source, r=nox
Implement timer-task-source, time-out service worker
<!-- Please describe your changes on the following line: -->
Implements the timer task-source, and folds the IPC glue-code into a single route set by the globalscope.
Also switches service worker to using a dedicated "time-out" mechanism, which previously relied on the timer mechanism(and I think didn't actually implement script timers).
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #24747 (GitHub issue number if applicable)
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
Diffstat (limited to 'components/script/dom/abstractworkerglobalscope.rs')
-rw-r--r-- | components/script/dom/abstractworkerglobalscope.rs | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/components/script/dom/abstractworkerglobalscope.rs b/components/script/dom/abstractworkerglobalscope.rs index e8e41375b70..d5186f91845 100644 --- a/components/script/dom/abstractworkerglobalscope.rs +++ b/components/script/dom/abstractworkerglobalscope.rs @@ -81,32 +81,27 @@ impl ScriptPort for Receiver<DedicatedWorkerScriptMsg> { } pub trait WorkerEventLoopMethods { - type TimerMsg: Send; type WorkerMsg: QueuedTaskConversion + Send; type Event; - fn timer_event_port(&self) -> &Receiver<Self::TimerMsg>; fn task_queue(&self) -> &TaskQueue<Self::WorkerMsg>; fn handle_event(&self, event: Self::Event); fn handle_worker_post_event(&self, worker: &TrustedWorkerAddress) -> Option<AutoWorkerReset>; fn from_worker_msg(&self, msg: Self::WorkerMsg) -> Self::Event; - fn from_timer_msg(&self, msg: Self::TimerMsg) -> Self::Event; fn from_devtools_msg(&self, msg: DevtoolScriptControlMsg) -> Self::Event; } // https://html.spec.whatwg.org/multipage/#worker-event-loop -pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>( +pub fn run_worker_event_loop<T, WorkerMsg, Event>( worker_scope: &T, worker: Option<&TrustedWorkerAddress>, ) where - TimerMsg: Send, WorkerMsg: QueuedTaskConversion + Send, - T: WorkerEventLoopMethods<TimerMsg = TimerMsg, WorkerMsg = WorkerMsg, Event = Event> + T: WorkerEventLoopMethods<WorkerMsg = WorkerMsg, Event = Event> + DerivedFrom<WorkerGlobalScope> + DerivedFrom<GlobalScope> + DomObject, { let scope = worker_scope.upcast::<WorkerGlobalScope>(); - let timer_event_port = worker_scope.timer_event_port(); let devtools_port = match scope.from_devtools_sender() { Some(_) => Some(scope.from_devtools_receiver()), None => None, @@ -117,7 +112,6 @@ pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>( task_queue.take_tasks(msg.unwrap()); worker_scope.from_worker_msg(task_queue.recv().unwrap()) }, - recv(timer_event_port) -> msg => worker_scope.from_timer_msg(msg.unwrap()), recv(devtools_port.unwrap_or(&crossbeam_channel::never())) -> msg => worker_scope.from_devtools_msg(msg.unwrap()), }; @@ -132,13 +126,10 @@ pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>( // Batch all events that are ready. // The task queue will throttle non-priority tasks if necessary. match task_queue.try_recv() { - Err(_) => match timer_event_port.try_recv() { - Err(_) => match devtools_port.map(|port| port.try_recv()) { - None => {}, - Some(Err(_)) => break, - Some(Ok(ev)) => sequential.push(worker_scope.from_devtools_msg(ev)), - }, - Ok(ev) => sequential.push(worker_scope.from_timer_msg(ev)), + Err(_) => match devtools_port.map(|port| port.try_recv()) { + None => {}, + Some(Err(_)) => break, + Some(Ok(ev)) => sequential.push(worker_scope.from_devtools_msg(ev)), }, Ok(ev) => sequential.push(worker_scope.from_worker_msg(ev)), } |