aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_manager.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/task_manager.rs')
-rw-r--r--components/script/task_manager.rs169
1 files changed, 53 insertions, 116 deletions
diff --git a/components/script/task_manager.rs b/components/script/task_manager.rs
index 08d018f1066..adcca1c58d6 100644
--- a/components/script/task_manager.rs
+++ b/components/script/task_manager.rs
@@ -9,35 +9,22 @@ use std::sync::Arc;
use base::id::PipelineId;
use crate::dom::bindings::cell::DomRefCell;
-use crate::messaging::MainThreadScriptChan;
+use crate::script_runtime::ScriptChan;
use crate::task::TaskCanceller;
-use crate::task_source::dom_manipulation::DOMManipulationTaskSource;
-use crate::task_source::file_reading::FileReadingTaskSource;
-use crate::task_source::gamepad::GamepadTaskSource;
-use crate::task_source::history_traversal::HistoryTraversalTaskSource;
-use crate::task_source::media_element::MediaElementTaskSource;
-use crate::task_source::networking::NetworkingTaskSource;
-use crate::task_source::performance_timeline::PerformanceTimelineTaskSource;
-use crate::task_source::port_message::PortMessageQueue;
-use crate::task_source::remote_event::RemoteEventTaskSource;
-use crate::task_source::rendering::RenderingTaskSource;
-use crate::task_source::timer::TimerTaskSource;
-use crate::task_source::user_interaction::UserInteractionTaskSource;
-use crate::task_source::websocket::WebsocketTaskSource;
-use crate::task_source::TaskSourceName;
+use crate::task_source::{TaskSource, TaskSourceName};
macro_rules! task_source_functions {
- ($self:ident, $task_source:ident, $task_source_type:ident, $task_source_name:ident) => {
- pub(crate) fn $task_source(&$self) -> $task_source_type {
+ ($self:ident, $task_source:ident) => {
+ pub(crate) fn $task_source(&$self) -> TaskSource {
$self.$task_source.clone()
}
};
- ($self:ident, $with_canceller:ident, $task_source:ident, $task_source_type:ident, $task_source_name:ident) => {
- pub(crate) fn $with_canceller(&$self) -> ($task_source_type, TaskCanceller) {
- ($self.$task_source.clone(), $self.task_canceller(TaskSourceName::$task_source_name))
+ ($self:ident, $with_canceller:ident, $task_source:ident) => {
+ pub(crate) fn $with_canceller(&$self) -> (TaskSource, TaskCanceller) {
+ ($self.$task_source.clone(), $self.task_canceller($self.$task_source.name))
}
- pub(crate) fn $task_source(&$self) -> $task_source_type {
+ pub(crate) fn $task_source(&$self) -> TaskSource {
$self.$task_source.clone()
}
};
@@ -47,57 +34,44 @@ macro_rules! task_source_functions {
pub struct TaskManager {
#[ignore_malloc_size_of = "task sources are hard"]
pub task_cancellers: DomRefCell<HashMap<TaskSourceName, Arc<AtomicBool>>>,
- #[ignore_malloc_size_of = "task sources are hard"]
- dom_manipulation_task_source: DOMManipulationTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- file_reading_task_source: FileReadingTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- gamepad_task_source: GamepadTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- history_traversal_task_source: HistoryTraversalTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- media_element_task_source: MediaElementTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- networking_task_source: NetworkingTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- performance_timeline_task_source: PerformanceTimelineTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- port_message_queue: PortMessageQueue,
- #[ignore_malloc_size_of = "task sources are hard"]
- user_interaction_task_source: UserInteractionTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- remote_event_task_source: RemoteEventTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- rendering_task_source: RenderingTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- timer_task_source: TimerTaskSource,
- #[ignore_malloc_size_of = "task sources are hard"]
- websocket_task_source: WebsocketTaskSource,
+ dom_manipulation_task_source: TaskSource,
+ file_reading_task_source: TaskSource,
+ gamepad_task_source: TaskSource,
+ history_traversal_task_source: TaskSource,
+ media_element_task_source: TaskSource,
+ networking_task_source: TaskSource,
+ performance_timeline_task_source: TaskSource,
+ port_message_queue: TaskSource,
+ user_interaction_task_source: TaskSource,
+ remote_event_task_source: TaskSource,
+ rendering_task_source: TaskSource,
+ timer_task_source: TaskSource,
+ websocket_task_source: TaskSource,
}
impl TaskManager {
#[allow(clippy::too_many_arguments)]
- pub(crate) fn new(sender: Box<MainThreadScriptChan>, pipeline_id: PipelineId) -> Self {
+ pub(crate) fn new(sender: Box<dyn ScriptChan + Send>, pipeline_id: PipelineId) -> Self {
+ let task_source = |name| TaskSource {
+ sender: sender.as_boxed(),
+ pipeline_id,
+ name,
+ };
+
TaskManager {
- dom_manipulation_task_source: DOMManipulationTaskSource(sender.clone(), pipeline_id),
- file_reading_task_source: FileReadingTaskSource(sender.clone(), pipeline_id),
- gamepad_task_source: GamepadTaskSource(sender.clone(), pipeline_id),
- history_traversal_task_source: HistoryTraversalTaskSource(
- sender.0.clone(),
- pipeline_id,
- ),
- media_element_task_source: MediaElementTaskSource(sender.0.clone(), pipeline_id),
- networking_task_source: NetworkingTaskSource(sender.clone(), pipeline_id),
- performance_timeline_task_source: PerformanceTimelineTaskSource(
- sender.clone(),
- pipeline_id,
- ),
- port_message_queue: PortMessageQueue(sender.clone(), pipeline_id),
- user_interaction_task_source: UserInteractionTaskSource(sender.0.clone(), pipeline_id),
- remote_event_task_source: RemoteEventTaskSource(sender.clone(), pipeline_id),
- rendering_task_source: RenderingTaskSource(sender.clone(), pipeline_id),
- timer_task_source: TimerTaskSource(sender.clone(), pipeline_id),
- websocket_task_source: WebsocketTaskSource(sender.clone(), pipeline_id),
+ dom_manipulation_task_source: task_source(TaskSourceName::DOMManipulation),
+ file_reading_task_source: task_source(TaskSourceName::FileReading),
+ gamepad_task_source: task_source(TaskSourceName::Gamepad),
+ history_traversal_task_source: task_source(TaskSourceName::HistoryTraversal),
+ media_element_task_source: task_source(TaskSourceName::MediaElement),
+ networking_task_source: task_source(TaskSourceName::Networking),
+ performance_timeline_task_source: task_source(TaskSourceName::PerformanceTimeline),
+ port_message_queue: task_source(TaskSourceName::PortMessage),
+ user_interaction_task_source: task_source(TaskSourceName::UserInteraction),
+ remote_event_task_source: task_source(TaskSourceName::RemoteEvent),
+ rendering_task_source: task_source(TaskSourceName::Rendering),
+ timer_task_source: task_source(TaskSourceName::Timer),
+ websocket_task_source: task_source(TaskSourceName::WebSocket),
task_cancellers: Default::default(),
}
}
@@ -105,64 +79,27 @@ impl TaskManager {
task_source_functions!(
self,
dom_manipulation_task_source_with_canceller,
- dom_manipulation_task_source,
- DOMManipulationTaskSource,
- DOMManipulation
+ dom_manipulation_task_source
);
-
- task_source_functions!(self, gamepad_task_source, GamepadTaskSource, Gamepad);
-
+ task_source_functions!(self, gamepad_task_source);
task_source_functions!(
self,
media_element_task_source_with_canceller,
- media_element_task_source,
- MediaElementTaskSource,
- MediaElement
+ media_element_task_source
);
-
- task_source_functions!(
- self,
- user_interaction_task_source,
- UserInteractionTaskSource,
- UserInteraction
- );
-
+ task_source_functions!(self, user_interaction_task_source);
task_source_functions!(
self,
networking_task_source_with_canceller,
- networking_task_source,
- NetworkingTaskSource,
- Networking
- );
-
- task_source_functions!(
- self,
- file_reading_task_source,
- FileReadingTaskSource,
- FileReading
- );
-
- task_source_functions!(
- self,
- performance_timeline_task_source,
- PerformanceTimelineTaskSource,
- PerformanceTimeline
+ networking_task_source
);
-
- task_source_functions!(self, port_message_queue, PortMessageQueue, PortMessage);
-
- task_source_functions!(
- self,
- remote_event_task_source,
- RemoteEventTaskSource,
- RemoteEvent
- );
-
- task_source_functions!(self, rendering_task_source, RenderingTaskSource, Rendering);
-
- task_source_functions!(self, timer_task_source, TimerTaskSource, Timer);
-
- task_source_functions!(self, websocket_task_source, WebsocketTaskSource, Websocket);
+ task_source_functions!(self, file_reading_task_source);
+ task_source_functions!(self, performance_timeline_task_source);
+ task_source_functions!(self, port_message_queue);
+ task_source_functions!(self, remote_event_task_source);
+ task_source_functions!(self, rendering_task_source);
+ task_source_functions!(self, timer_task_source);
+ task_source_functions!(self, websocket_task_source);
pub fn task_canceller(&self, name: TaskSourceName) -> TaskCanceller {
let mut flags = self.task_cancellers.borrow_mut();