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_and_recv(&self) -> Result<T, ()>
pub fn take_tasks_and_recv(&self) -> Result<T, ()>
Take all tasks again and then run recv()
.
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.
Trait Implementations§
Auto Trait Implementations§
impl<T> !Freeze for TaskQueue<T>
impl<T> !RefUnwindSafe for TaskQueue<T>
impl<T> Send for TaskQueue<T>where
T: Send,
impl<T> !Sync for TaskQueue<T>
impl<T> Unpin for TaskQueue<T>where
T: Unpin,
impl<T> !UnwindSafe for TaskQueue<T>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more