mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Introduce GlobalScope::get_runnable_wrapper
This commit is contained in:
parent
ca8c6fb072
commit
514819f37a
4 changed files with 16 additions and 13 deletions
|
@ -19,7 +19,7 @@ use js::glue::{IsWrapper, UnwrapObject};
|
||||||
use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
|
use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
|
||||||
use js::jsapi::{JSContext, JSObject, JS_GetClass};
|
use js::jsapi::{JSContext, JSObject, JS_GetClass};
|
||||||
use script_runtime::{CommonScriptMsg, EnqueuedPromiseCallback, ScriptChan, ScriptPort};
|
use script_runtime::{CommonScriptMsg, EnqueuedPromiseCallback, ScriptChan, ScriptPort};
|
||||||
use script_thread::{RunnableWrapper, ScriptThread};
|
use script_thread::ScriptThread;
|
||||||
use task_source::file_reading::FileReadingTaskSource;
|
use task_source::file_reading::FileReadingTaskSource;
|
||||||
|
|
||||||
/// A freely-copyable reference to a rooted global object.
|
/// A freely-copyable reference to a rooted global object.
|
||||||
|
@ -85,15 +85,6 @@ impl<'a> GlobalRef<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a wrapper for runnables to ensure they are cancelled if the global
|
|
||||||
/// is being destroyed.
|
|
||||||
pub fn get_runnable_wrapper(&self) -> RunnableWrapper {
|
|
||||||
match *self {
|
|
||||||
GlobalRef::Window(ref window) => window.get_runnable_wrapper(),
|
|
||||||
GlobalRef::Worker(ref worker) => worker.get_runnable_wrapper(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Enqueue a promise callback for subsequent execution.
|
/// Enqueue a promise callback for subsequent execution.
|
||||||
pub fn enqueue_promise_job(&self, job: EnqueuedPromiseCallback) {
|
pub fn enqueue_promise_job(&self, job: EnqueuedPromiseCallback) {
|
||||||
match *self {
|
match *self {
|
||||||
|
|
|
@ -354,7 +354,7 @@ impl FileReader {
|
||||||
let fr = Trusted::new(self);
|
let fr = Trusted::new(self);
|
||||||
let gen_id = self.generation_id.get();
|
let gen_id = self.generation_id.get();
|
||||||
|
|
||||||
let wrapper = self.global().r().get_runnable_wrapper();
|
let wrapper = self.global_scope().get_runnable_wrapper();
|
||||||
let task_source = self.global().r().file_reading_task_source();
|
let task_source = self.global().r().file_reading_task_source();
|
||||||
|
|
||||||
spawn_named("file reader async operation".to_owned(), move || {
|
spawn_named("file reader async operation".to_owned(), move || {
|
||||||
|
|
|
@ -27,7 +27,7 @@ use msg::constellation_msg::PipelineId;
|
||||||
use net_traits::{CoreResourceThread, ResourceThreads, IpcSend};
|
use net_traits::{CoreResourceThread, ResourceThreads, IpcSend};
|
||||||
use profile_traits::{mem, time};
|
use profile_traits::{mem, time};
|
||||||
use script_runtime::{ScriptChan, maybe_take_panic_result};
|
use script_runtime::{ScriptChan, maybe_take_panic_result};
|
||||||
use script_thread::MainThreadScriptChan;
|
use script_thread::{MainThreadScriptChan, RunnableWrapper};
|
||||||
use script_traits::{MsDuration, ScriptMsg as ConstellationMsg, TimerEvent};
|
use script_traits::{MsDuration, ScriptMsg as ConstellationMsg, TimerEvent};
|
||||||
use script_traits::{TimerEventId, TimerEventRequest, TimerSource};
|
use script_traits::{TimerEventId, TimerEventRequest, TimerSource};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
@ -396,6 +396,18 @@ impl GlobalScope {
|
||||||
}
|
}
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a wrapper for runnables to ensure they are cancelled if
|
||||||
|
/// the global scope is being destroyed.
|
||||||
|
pub fn get_runnable_wrapper(&self) -> RunnableWrapper {
|
||||||
|
if let Some(window) = self.downcast::<Window>() {
|
||||||
|
return window.get_runnable_wrapper();
|
||||||
|
}
|
||||||
|
if let Some(worker) = self.downcast::<WorkerGlobalScope>() {
|
||||||
|
return worker.get_runnable_wrapper();
|
||||||
|
}
|
||||||
|
unreachable!();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn timestamp_in_ms(time: Timespec) -> u64 {
|
fn timestamp_in_ms(time: Timespec) -> u64 {
|
||||||
|
|
|
@ -19,6 +19,6 @@ pub trait TaskSource {
|
||||||
-> Result<(), ()>
|
-> Result<(), ()>
|
||||||
where T: Runnable + Send + 'static;
|
where T: Runnable + Send + 'static;
|
||||||
fn queue<T: Runnable + Send + 'static>(&self, msg: Box<T>, global: GlobalRef) -> Result<(), ()> {
|
fn queue<T: Runnable + Send + 'static>(&self, msg: Box<T>, global: GlobalRef) -> Result<(), ()> {
|
||||||
self.queue_with_wrapper(msg, &global.get_runnable_wrapper())
|
self.queue_with_wrapper(msg, &global.as_global_scope().get_runnable_wrapper())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue