diff options
author | Agustin Chiappe Berrini <jnieve@gmail.com> | 2018-09-02 08:18:22 -0400 |
---|---|---|
committer | AgustinCB <jnieve@gmail.com> | 2018-09-04 09:17:11 -0400 |
commit | e286fdcc536df0cae9020a677380ffe2fa494566 (patch) | |
tree | f9bcfc3d8283f1bc015adfa4249d9276d69088cb | |
parent | b211e45bb0106127edbedb31cb36209da3934eeb (diff) | |
download | servo-e286fdcc536df0cae9020a677380ffe2fa494566.tar.gz servo-e286fdcc536df0cae9020a677380ffe2fa494566.zip |
Add the TaskSourceName to CommonScriptMsg::Task
Update QueuedTaskConversion and the TaskQueue to use it
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 48 | ||||
-rw-r--r-- | components/script/dom/document.rs | 18 | ||||
-rw-r--r-- | components/script/dom/serviceworkerglobalscope.rs | 24 | ||||
-rw-r--r-- | components/script/dom/vrdisplay.rs | 10 | ||||
-rw-r--r-- | components/script/dom/websocket.rs | 8 | ||||
-rw-r--r-- | components/script/dom/window.rs | 6 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 2 | ||||
-rw-r--r-- | components/script/dom/worklet.rs | 10 | ||||
-rw-r--r-- | components/script/script_runtime.rs | 5 | ||||
-rw-r--r-- | components/script/script_thread.rs | 26 | ||||
-rw-r--r-- | components/script/task_queue.rs | 31 | ||||
-rw-r--r-- | components/script/task_source/dom_manipulation.rs | 5 | ||||
-rw-r--r-- | components/script/task_source/file_reading.rs | 1 | ||||
-rw-r--r-- | components/script/task_source/mod.rs | 2 | ||||
-rw-r--r-- | components/script/task_source/networking.rs | 2 | ||||
-rw-r--r-- | components/script/task_source/performance_timeline.rs | 3 | ||||
-rw-r--r-- | components/script/task_source/remote_event.rs | 1 | ||||
-rw-r--r-- | components/script/task_source/user_interaction.rs | 3 |
18 files changed, 134 insertions, 71 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 7cb23fbd7f1..c582177f42e 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -33,7 +33,7 @@ use js::rust::HandleValue; use msg::constellation_msg::TopLevelBrowsingContextId; use net_traits::{IpcSend, load_whole_resource}; use net_traits::request::{CredentialsMode, Destination, RequestInit}; -use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, ScriptThreadEventCategory, new_rt_and_cx, Runtime}; +use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, new_rt_and_cx, Runtime}; use script_runtime::ScriptThreadEventCategory::WorkerEvent; use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin}; use servo_rand::random; @@ -45,6 +45,7 @@ use std::sync::mpsc::{Receiver, Sender, channel}; use std::thread; use style::thread_state::{self, ThreadState}; use task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue}; +use task_source::TaskSourceName; /// Set the `worker` field of a related DedicatedWorkerGlobalScope object to a particular /// value for the duration of this object's lifetime. This ensures that the related Worker @@ -86,7 +87,7 @@ pub enum MixedMessage { } impl QueuedTaskConversion for DedicatedWorkerScriptMsg { - fn task_category(&self) -> Option<&ScriptThreadEventCategory> { + fn task_source_name(&self) -> Option<&TaskSourceName> { let common_worker_msg = match self { DedicatedWorkerScriptMsg::CommonWorker(_, common_worker_msg) => common_worker_msg, _ => return None, @@ -95,11 +96,10 @@ impl QueuedTaskConversion for DedicatedWorkerScriptMsg { WorkerScriptMsg::Common(ref script_msg) => script_msg, _ => return None, }; - let category = match script_msg { - CommonScriptMsg::Task(category, _boxed, _pipeline_id) => category, + match script_msg { + CommonScriptMsg::Task(_category, _boxed, _pipeline_id, source_name) => Some(&source_name), _ => return None, - }; - Some(category) + } } fn into_queued_task(self) -> Option<QueuedTask> { @@ -111,17 +111,22 @@ impl QueuedTaskConversion for DedicatedWorkerScriptMsg { WorkerScriptMsg::Common(script_msg) => script_msg, _ => return None, }; - let (category, boxed, pipeline_id) = match script_msg { - CommonScriptMsg::Task(category, boxed, pipeline_id) => - (category, boxed, pipeline_id), + let (category, boxed, pipeline_id, task_source) = match script_msg { + CommonScriptMsg::Task(category, boxed, pipeline_id, task_source) => + (category, boxed, pipeline_id, task_source), _ => return None, }; - Some((Some(worker), category, boxed, pipeline_id)) + Some((Some(worker), category, boxed, pipeline_id, task_source)) } fn from_queued_task(queued_task: QueuedTask) -> Self { - let (worker, category, boxed, pipeline_id) = queued_task; - let script_msg = CommonScriptMsg::Task(category, boxed, pipeline_id); + let (worker, category, boxed, pipeline_id, task_source) = queued_task; + let script_msg = CommonScriptMsg::Task( + category, + boxed, + pipeline_id, + task_source + ); DedicatedWorkerScriptMsg::CommonWorker(worker.unwrap(), WorkerScriptMsg::Common(script_msg)) } @@ -295,7 +300,8 @@ impl DedicatedWorkerGlobalScope { parent_sender.send(CommonScriptMsg::Task( WorkerEvent, Box::new(SimpleWorkerErrorHandler::new(worker)), - pipeline_id + pipeline_id, + TaskSourceName::DOMManipulation, )).unwrap(); return; } @@ -446,8 +452,12 @@ impl DedicatedWorkerGlobalScope { global.report_an_error(error_info, HandleValue::null()); } })); - // TODO: Should use the DOM manipulation task source. - self.parent_sender.send(CommonScriptMsg::Task(WorkerEvent, task, Some(pipeline_id))).unwrap(); + self.parent_sender.send(CommonScriptMsg::Task( + WorkerEvent, + task, + Some(pipeline_id), + TaskSourceName::DOMManipulation, + )).unwrap(); } } @@ -472,7 +482,13 @@ impl DedicatedWorkerGlobalScopeMethods for DedicatedWorkerGlobalScope { let task = Box::new(task!(post_worker_message: move || { Worker::handle_message(worker, data); })); - self.parent_sender.send(CommonScriptMsg::Task(WorkerEvent, task, Some(pipeline_id))).unwrap(); + // TODO: Change this task source to a new `unshipped-port-message-queue` task source + self.parent_sender.send(CommonScriptMsg::Task( + WorkerEvent, + task, + Some(pipeline_id), + TaskSourceName::DOMManipulation, + )).unwrap(); Ok(()) } diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 5394089d220..cc1a82d04ef 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -2837,7 +2837,14 @@ impl Document { let trusted_pending = Trusted::new(pending); let trusted_promise = TrustedPromise::new(promise.clone()); let handler = ElementPerformFullscreenEnter::new(trusted_pending, trusted_promise, error); - let script_msg = CommonScriptMsg::Task(ScriptThreadEventCategory::EnterFullscreen, handler, pipeline_id); + // NOTE: This steps should be running in parallel + // https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen + let script_msg = CommonScriptMsg::Task( + ScriptThreadEventCategory::EnterFullscreen, + handler, + pipeline_id, + TaskSourceName::DOMManipulation, + ); let msg = MainThreadScriptMsg::Common(script_msg); window.main_thread_script_chan().send(msg).unwrap(); @@ -2870,7 +2877,14 @@ impl Document { let trusted_promise = TrustedPromise::new(promise.clone()); let handler = ElementPerformFullscreenExit::new(trusted_element, trusted_promise); let pipeline_id = Some(global.pipeline_id()); - let script_msg = CommonScriptMsg::Task(ScriptThreadEventCategory::ExitFullscreen, handler, pipeline_id); + // NOTE: This steps should be running in parallel + // https://fullscreen.spec.whatwg.org/#exit-fullscreen + let script_msg = CommonScriptMsg::Task( + ScriptThreadEventCategory::ExitFullscreen, + handler, + pipeline_id, + TaskSourceName::DOMManipulation, + ); let msg = MainThreadScriptMsg::Common(script_msg); window.main_thread_script_chan().send(msg).unwrap(); diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index 97573df279a..50080f9925b 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -27,7 +27,7 @@ use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback}; use js::jsval::UndefinedValue; use net_traits::{load_whole_resource, IpcSend, CustomResponseMediator}; use net_traits::request::{CredentialsMode, Destination, RequestInit}; -use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory, new_rt_and_cx, Runtime}; +use script_runtime::{CommonScriptMsg, ScriptChan, new_rt_and_cx, Runtime}; use script_traits::{TimerEvent, WorkerGlobalScopeInit, ScopeThings, ServiceWorkerMsg, WorkerScriptLoadOrigin}; use servo_config::prefs::PREFS; use servo_rand::random; @@ -37,6 +37,7 @@ use std::thread; use std::time::Duration; use style::thread_state::{self, ThreadState}; use task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue}; +use task_source::TaskSourceName; /// Messages used to control service worker event loop pub enum ServiceWorkerScriptMsg { @@ -49,16 +50,15 @@ pub enum ServiceWorkerScriptMsg { } impl QueuedTaskConversion for ServiceWorkerScriptMsg { - fn task_category(&self) -> Option<&ScriptThreadEventCategory> { + fn task_source_name(&self) -> Option<&TaskSourceName> { let script_msg = match self { ServiceWorkerScriptMsg::CommonWorker(WorkerScriptMsg::Common(script_msg)) => script_msg, _ => return None, }; - let category = match script_msg { - CommonScriptMsg::Task(category, _boxed, _pipeline_id) => category, + match script_msg { + CommonScriptMsg::Task(_category, _boxed, _pipeline_id, task_source) => Some(&task_source), _ => return None, - }; - Some(&category) + } } fn into_queued_task(self) -> Option<QueuedTask> { @@ -66,17 +66,17 @@ impl QueuedTaskConversion for ServiceWorkerScriptMsg { ServiceWorkerScriptMsg::CommonWorker(WorkerScriptMsg::Common(script_msg)) => script_msg, _ => return None, }; - let (category, boxed, pipeline_id) = match script_msg { - CommonScriptMsg::Task(category, boxed, pipeline_id) => - (category, boxed, pipeline_id), + let (category, boxed, pipeline_id, task_source) = match script_msg { + CommonScriptMsg::Task(category, boxed, pipeline_id, task_source) => + (category, boxed, pipeline_id, task_source), _ => return None, }; - Some((None, category, boxed, pipeline_id)) + Some((None, category, boxed, pipeline_id, task_source)) } fn from_queued_task(queued_task: QueuedTask) -> Self { - let (_worker, category, boxed, pipeline_id) = queued_task; - let script_msg = CommonScriptMsg::Task(category, boxed, pipeline_id); + let (_worker, category, boxed, pipeline_id, task_source) = queued_task; + let script_msg = CommonScriptMsg::Task(category, boxed, pipeline_id, task_source); ServiceWorkerScriptMsg::CommonWorker(WorkerScriptMsg::Common(script_msg)) } diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs index c9f24d04ffa..397ec725a4d 100644 --- a/components/script/dom/vrdisplay.rs +++ b/components/script/dom/vrdisplay.rs @@ -42,6 +42,7 @@ use std::ops::Deref; use std::rc::Rc; use std::sync::mpsc; use std::thread; +use task_source::TaskSourceName; use webvr_traits::{WebVRDisplayData, WebVRDisplayEvent, WebVRFrameData, WebVRLayer, WebVRMsg}; #[dom_struct] @@ -517,7 +518,14 @@ impl VRDisplay { let task = Box::new(task!(handle_vrdisplay_raf: move || { this.root().handle_raf(&sender); })); - js_sender.send(CommonScriptMsg::Task(WebVREvent, task, Some(pipeline_id))).unwrap(); + // NOTE: WebVR spec doesn't specify what task source we should use. Is + // dom-manipulation a good choice long term? + js_sender.send(CommonScriptMsg::Task( + WebVREvent, + task, + Some(pipeline_id), + TaskSourceName::DOMManipulation, + )).unwrap(); // Run Sync Poses in parallell on Render thread let msg = WebVRCommand::SyncPoses(display_id, near, far, sync_sender.clone()); diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 2de8f97d98e..0a319bdc92e 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -268,7 +268,13 @@ impl WebSocket { let pipeline_id = self.global().pipeline_id(); self.global() .script_chan() - .send(CommonScriptMsg::Task(WebSocketEvent, task, Some(pipeline_id))) + // TODO: Use a dedicated `websocket-task-source` task source instead. + .send(CommonScriptMsg::Task( + WebSocketEvent, + task, + Some(pipeline_id), + TaskSourceName::Networking, + )) .unwrap(); } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index e125aa87fd9..fd6068360c3 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -1666,7 +1666,8 @@ impl Window { let _ = self.script_chan.send(CommonScriptMsg::Task( ScriptThreadEventCategory::DomEvent, Box::new(self.task_canceller(TaskSourceName::DOMManipulation).wrap_task(task)), - self.pipeline_id() + self.pipeline_id(), + TaskSourceName::DOMManipulation, )); doc.set_url(url.clone()); return @@ -2123,7 +2124,8 @@ impl Window { let _ = self.script_chan.send(CommonScriptMsg::Task( ScriptThreadEventCategory::DomEvent, Box::new(self.task_canceller(TaskSourceName::DOMManipulation).wrap_task(task)), - self.pipeline_id() + self.pipeline_id(), + TaskSourceName::DOMManipulation, )); } } diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 1718286e55a..9418b51759c 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -397,7 +397,7 @@ impl WorkerGlobalScope { pub fn process_event(&self, msg: CommonScriptMsg) { match msg { - CommonScriptMsg::Task(_, task, _) => { + CommonScriptMsg::Task(_, task, _, _) => { task.run_box() }, CommonScriptMsg::CollectReports(reports_chan) => { diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs index a2e454507a8..d1b7ba9c44a 100644 --- a/components/script/dom/worklet.rs +++ b/components/script/dom/worklet.rs @@ -66,6 +66,7 @@ use style::thread_state::{self, ThreadState}; use swapper::Swapper; use swapper::swapper; use task::TaskBox; +use task_source::TaskSourceName; use uuid::Uuid; // Magic numbers @@ -644,7 +645,14 @@ impl WorkletThread { where T: TaskBox + 'static, { - let msg = CommonScriptMsg::Task(ScriptThreadEventCategory::WorkletEvent, Box::new(task), None); + // NOTE: It's unclear which task source should be used here: + // https://drafts.css-houdini.org/worklets/#dom-worklet-addmodule + let msg = CommonScriptMsg::Task( + ScriptThreadEventCategory::WorkletEvent, + Box::new(task), + None, + TaskSourceName::DOMManipulation, + ); let msg = MainThreadScriptMsg::Common(msg); self.global_init.to_script_thread_sender.send(msg).expect("Worklet thread outlived script thread."); } diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs index b5d598d1c79..6758e3bd852 100644 --- a/components/script/script_runtime.rs +++ b/components/script/script_runtime.rs @@ -43,6 +43,7 @@ use std::panic::AssertUnwindSafe; use std::ptr; use style::thread_state::{self, ThreadState}; use task::TaskBox; +use task_source::TaskSourceName; use time::{Tm, now}; /// Common messages used to control the event loops in both the script and the worker @@ -51,14 +52,14 @@ pub enum CommonScriptMsg { /// supplied channel. CollectReports(ReportsChan), /// Generic message that encapsulates event handling. - Task(ScriptThreadEventCategory, Box<TaskBox>, Option<PipelineId>), + Task(ScriptThreadEventCategory, Box<TaskBox>, Option<PipelineId>, TaskSourceName), } impl fmt::Debug for CommonScriptMsg { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { CommonScriptMsg::CollectReports(_) => write!(f, "CollectReports(...)"), - CommonScriptMsg::Task(ref category, ref task, _) => { + CommonScriptMsg::Task(ref category, ref task, _, _) => { f.debug_tuple("Task").field(category).field(task).finish() }, } diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index e6de4a60fbc..090fc743a47 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -117,6 +117,7 @@ use std::sync::mpsc::{Receiver, Select, Sender, channel}; use std::thread; use style::thread_state::{self, ThreadState}; use task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue}; +use task_source::TaskSourceName; use task_source::dom_manipulation::DOMManipulationTaskSource; use task_source::file_reading::FileReadingTaskSource; use task_source::history_traversal::HistoryTraversalTaskSource; @@ -248,16 +249,15 @@ pub enum MainThreadScriptMsg { } impl QueuedTaskConversion for MainThreadScriptMsg { - fn task_category(&self) -> Option<&ScriptThreadEventCategory> { + fn task_source_name(&self) -> Option<&TaskSourceName> { let script_msg = match self { MainThreadScriptMsg::Common(script_msg) => script_msg, _ => return None, }; - let category = match script_msg { - CommonScriptMsg::Task(category, _boxed, _pipeline_id) => category, + match script_msg { + CommonScriptMsg::Task(_category, _boxed, _pipeline_id, task_source) => Some(&task_source), _ => return None, - }; - Some(&category) + } } fn into_queued_task(self) -> Option<QueuedTask> { @@ -265,17 +265,17 @@ impl QueuedTaskConversion for MainThreadScriptMsg { MainThreadScriptMsg::Common(script_msg) => script_msg, _ => return None, }; - let (category, boxed, pipeline_id) = match script_msg { - CommonScriptMsg::Task(category, boxed, pipeline_id) => - (category, boxed, pipeline_id), + let (category, boxed, pipeline_id, task_source) = match script_msg { + CommonScriptMsg::Task(category, boxed, pipeline_id, task_source) => + (category, boxed, pipeline_id, task_source), _ => return None, }; - Some((None, category, boxed, pipeline_id)) + Some((None, category, boxed, pipeline_id, task_source)) } fn from_queued_task(queued_task: QueuedTask) -> Self { - let (_worker, category, boxed, pipeline_id) = queued_task; - let script_msg = CommonScriptMsg::Task(category, boxed, pipeline_id); + let (_worker, category, boxed, pipeline_id, task_source) = queued_task; + let script_msg = CommonScriptMsg::Task(category, boxed, pipeline_id, task_source); MainThreadScriptMsg::Common(script_msg) } @@ -1279,7 +1279,7 @@ impl ScriptThread { MixedMessage::FromDevtools(_) => None, MixedMessage::FromScript(ref inner_msg) => { match *inner_msg { - MainThreadScriptMsg::Common(CommonScriptMsg::Task(_, _, pipeline_id)) => + MainThreadScriptMsg::Common(CommonScriptMsg::Task(_, _, pipeline_id, _)) => pipeline_id, MainThreadScriptMsg::Common(CommonScriptMsg::CollectReports(_)) => None, MainThreadScriptMsg::Navigate(pipeline_id, ..) => Some(pipeline_id), @@ -1433,7 +1433,7 @@ impl ScriptThread { MainThreadScriptMsg::Navigate(parent_pipeline_id, load_data, replace) => { self.handle_navigate(parent_pipeline_id, None, load_data, replace) }, - MainThreadScriptMsg::Common(CommonScriptMsg::Task(_, task, _)) => { + MainThreadScriptMsg::Common(CommonScriptMsg::Task(_, task, _, _)) => { task.run_box() } MainThreadScriptMsg::Common(CommonScriptMsg::CollectReports(chan)) => { diff --git a/components/script/task_queue.rs b/components/script/task_queue.rs index df72bb9a069..7093474e1ed 100644 --- a/components/script/task_queue.rs +++ b/components/script/task_queue.rs @@ -16,11 +16,17 @@ use task::TaskBox; use task_source::TaskSourceName; -pub type QueuedTask = (Option<TrustedWorkerAddress>, ScriptThreadEventCategory, Box<TaskBox>, Option<PipelineId>); +pub type QueuedTask = ( + Option<TrustedWorkerAddress>, + ScriptThreadEventCategory, + Box<TaskBox>, + Option<PipelineId>, + TaskSourceName +); /// Defining the operations used to convert from a msg T to a QueuedTask. pub trait QueuedTaskConversion { - fn task_category(&self) -> Option<&ScriptThreadEventCategory>; + fn task_source_name(&self) -> Option<&TaskSourceName>; fn into_queued_task(self) -> Option<QueuedTask>; fn from_queued_task(queued_task: QueuedTask) -> Self; fn wake_up_msg() -> Self; @@ -60,12 +66,12 @@ impl<T: QueuedTaskConversion> TaskQueue<T> { .collect(); let to_be_throttled: Vec<T> = non_throttled.drain_filter(|msg|{ - let category = match msg.task_category() { - Some(category) => category, + let task_source = match msg.task_source_name() { + Some(task_source) => task_source, None => return false, }; - match category { - ScriptThreadEventCategory::PerformanceTimelineTask => return true, + match task_source { + TaskSourceName::PerformanceTimeline => return true, _ => { // A task that will not be throttled, start counting "business" self.taken_task_counter.set(self.taken_task_counter.get() + 1); @@ -81,20 +87,15 @@ impl<T: QueuedTaskConversion> TaskQueue<T> { for msg in to_be_throttled { // Categorize tasks per task queue. - let (worker, category, boxed, pipeline_id) = match msg.into_queued_task() { - Some((worker, category, boxed, pipeline_id)) => (worker, category, boxed, pipeline_id), + let (worker, category, boxed, pipeline_id, task_source) = match msg.into_queued_task() { + Some(queued_task) => queued_task, None => unreachable!("A message to be throttled should always be convertible into a queued task"), }; - // FIXME: Add the task-source name directly to CommonScriptMsg::Task. - let task_source = match category { - ScriptThreadEventCategory::PerformanceTimelineTask => TaskSourceName::PerformanceTimeline, - _ => unreachable!(), - }; let mut throttled_tasks = self.throttled.borrow_mut(); throttled_tasks - .entry(task_source) + .entry(task_source.clone()) .or_insert(VecDeque::new()) - .push_back((worker, category, boxed, pipeline_id)); + .push_back((worker, category, boxed, pipeline_id, task_source)); } } diff --git a/components/script/task_source/dom_manipulation.rs b/components/script/task_source/dom_manipulation.rs index 03b2d85a945..f184aa3d828 100644 --- a/components/script/task_source/dom_manipulation.rs +++ b/components/script/task_source/dom_manipulation.rs @@ -27,7 +27,7 @@ impl fmt::Debug for DOMManipulationTaskSource { } impl TaskSource for DOMManipulationTaskSource { - const NAME: TaskSourceName = TaskSourceName::DOMManipulation; + const NAME: TaskSourceName = TaskSourceName::DOMManipulation; fn queue_with_canceller<T>( &self, @@ -40,7 +40,8 @@ impl TaskSource for DOMManipulationTaskSource { let msg = MainThreadScriptMsg::Common(CommonScriptMsg::Task( ScriptThreadEventCategory::ScriptEvent, Box::new(canceller.wrap_task(task)), - Some(self.1) + Some(self.1), + DOMManipulationTaskSource::NAME, )); self.0.send(msg).map_err(|_| ()) } diff --git a/components/script/task_source/file_reading.rs b/components/script/task_source/file_reading.rs index 8fd3a143eff..f8ca38a0c30 100644 --- a/components/script/task_source/file_reading.rs +++ b/components/script/task_source/file_reading.rs @@ -34,6 +34,7 @@ impl TaskSource for FileReadingTaskSource { ScriptThreadEventCategory::FileRead, Box::new(canceller.wrap_task(task)), Some(self.1), + FileReadingTaskSource::NAME, )) } } diff --git a/components/script/task_source/mod.rs b/components/script/task_source/mod.rs index 23fb3e9ca8f..b64f4b2b991 100644 --- a/components/script/task_source/mod.rs +++ b/components/script/task_source/mod.rs @@ -20,7 +20,7 @@ use task::{TaskCanceller, TaskOnce}; // Note: When adding a task source, update this enum. // Note: The HistoryTraversalTaskSource is not part of this, // because it doesn't implement TaskSource. -#[derive(Eq, Hash, IntoEnumIterator, JSTraceable, PartialEq)] +#[derive(Clone, Eq, Hash, IntoEnumIterator, JSTraceable, PartialEq)] pub enum TaskSourceName { DOMManipulation, FileReading, diff --git a/components/script/task_source/networking.rs b/components/script/task_source/networking.rs index 9058f9653e4..9ecbea9c80d 100644 --- a/components/script/task_source/networking.rs +++ b/components/script/task_source/networking.rs @@ -31,6 +31,7 @@ impl TaskSource for NetworkingTaskSource { ScriptThreadEventCategory::NetworkEvent, Box::new(canceller.wrap_task(task)), Some(self.1), + NetworkingTaskSource::NAME, )) } } @@ -46,6 +47,7 @@ impl NetworkingTaskSource { ScriptThreadEventCategory::NetworkEvent, Box::new(task), Some(self.1), + NetworkingTaskSource::NAME, )) } } diff --git a/components/script/task_source/performance_timeline.rs b/components/script/task_source/performance_timeline.rs index 05591bbe71b..6191db7600a 100644 --- a/components/script/task_source/performance_timeline.rs +++ b/components/script/task_source/performance_timeline.rs @@ -44,7 +44,8 @@ impl TaskSource for PerformanceTimelineTaskSource { let msg = CommonScriptMsg::Task( ScriptThreadEventCategory::PerformanceTimelineTask, Box::new(canceller.wrap_task(task)), - Some(self.1) + Some(self.1), + PerformanceTimelineTaskSource::NAME, ); self.0.send(msg).map_err(|_| ()) } diff --git a/components/script/task_source/remote_event.rs b/components/script/task_source/remote_event.rs index 2d8428cddbf..97e33977e6f 100644 --- a/components/script/task_source/remote_event.rs +++ b/components/script/task_source/remote_event.rs @@ -31,6 +31,7 @@ impl TaskSource for RemoteEventTaskSource { ScriptThreadEventCategory::NetworkEvent, Box::new(canceller.wrap_task(task)), Some(self.1), + RemoteEventTaskSource::NAME, )) } } diff --git a/components/script/task_source/user_interaction.rs b/components/script/task_source/user_interaction.rs index 2ace44f1093..2beaee95731 100644 --- a/components/script/task_source/user_interaction.rs +++ b/components/script/task_source/user_interaction.rs @@ -40,7 +40,8 @@ impl TaskSource for UserInteractionTaskSource { let msg = MainThreadScriptMsg::Common(CommonScriptMsg::Task( ScriptThreadEventCategory::InputEvent, Box::new(canceller.wrap_task(task)), - Some(self.1) + Some(self.1), + UserInteractionTaskSource::NAME, )); self.0.send(msg).map_err(|_| ()) } |