Struct script::task_queue::TaskQueue
source · pub struct TaskQueue<T> {
port: Receiver<T>,
wake_up_sender: Sender<T>,
msg_queue: DomRefCell<VecDeque<T>>,
taken_task_counter: Cell<u64>,
throttled: DomRefCell<HashMap<TaskSourceName, VecDeque<(Option<Trusted<Worker>>, ScriptThreadEventCategory, Box<dyn TaskBox>, Option<PipelineId>, TaskSourceName)>>>,
inactive: DomRefCell<HashMap<PipelineId, VecDeque<(Option<Trusted<Worker>>, ScriptThreadEventCategory, Box<dyn TaskBox>, Option<PipelineId>, TaskSourceName)>>>,
}
Fields§
§port: Receiver<T>
The original port on which the task-sources send tasks as messages.
wake_up_sender: Sender<T>
A sender to ensure the port doesn’t block on select while there are throttled tasks.
msg_queue: DomRefCell<VecDeque<T>>
A queue from which the event-loop can drain tasks.
taken_task_counter: Cell<u64>
A “business” counter, reset for each iteration of the event-loop
throttled: DomRefCell<HashMap<TaskSourceName, VecDeque<(Option<Trusted<Worker>>, ScriptThreadEventCategory, Box<dyn TaskBox>, Option<PipelineId>, TaskSourceName)>>>
Tasks that will be throttled for as long as we are “busy”.
inactive: DomRefCell<HashMap<PipelineId, VecDeque<(Option<Trusted<Worker>>, ScriptThreadEventCategory, Box<dyn TaskBox>, Option<PipelineId>, TaskSourceName)>>>
Tasks for not fully-active documents.
Implementations§
source§impl<T: QueuedTaskConversion> TaskQueue<T>
impl<T: QueuedTaskConversion> TaskQueue<T>
pub fn new(port: Receiver<T>, wake_up_sender: Sender<T>) -> TaskQueue<T>
sourcefn release_tasks_for_fully_active_documents(
&self,
fully_active: &HashSet<PipelineId>
) -> Vec<T> ⓘ
fn release_tasks_for_fully_active_documents( &self, fully_active: &HashSet<PipelineId> ) -> Vec<T> ⓘ
Release previously held-back tasks for documents that are now fully-active. https://html.spec.whatwg.org/multipage/#event-loop-processing-model:fully-active
sourcefn store_task_for_inactive_pipeline(&self, msg: T, pipeline_id: &PipelineId)
fn store_task_for_inactive_pipeline(&self, msg: T, pipeline_id: &PipelineId)
Hold back tasks for currently not fully-active documents. https://html.spec.whatwg.org/multipage/#event-loop-processing-model:fully-active
sourcefn process_incoming_tasks(
&self,
first_msg: T,
fully_active: &HashSet<PipelineId>
)
fn process_incoming_tasks( &self, first_msg: T, fully_active: &HashSet<PipelineId> )
Process incoming tasks, immediately sending priority ones downstream, and categorizing potential throttles.
sourcepub fn select(&self) -> &Receiver<T>
pub fn select(&self) -> &Receiver<T>
Reset the queue for a new iteration of the event-loop, returning the port about whose readiness we want to be notified.
sourcepub fn recv(&self) -> Result<T, ()>
pub fn recv(&self) -> Result<T, ()>
Take a message from the front of the queue, without waiting if empty.
sourcepub fn take_tasks(&self, first_msg: T)
pub fn take_tasks(&self, first_msg: T)
Drain the queue for the current iteration of the event-loop. Holding-back throttles above a given high-water mark.