mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
script: Eliminate code duplication in the task queue (#34798)
Instead of creating a type for each `TaskSource` variety have each `TaskSource` hold the same kind of sender (this was inconsistent before, but each sender was effectively the same trait object), a pipeline, and a `TaskSourceName`. This elminates the need to reimplement the same queuing code for every task source. In addition, have workers hold their own `TaskManager`. This allows just exposing the manager on the `GlobalScope`. Currently the `TaskCanceller` is different, but this will also be eliminated in a followup change. This is a the first step toward having a shared set of `Sender`s on `GlobalScope`. Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
deb819f233
commit
77cfca65c4
67 changed files with 432 additions and 1200 deletions
|
@ -60,8 +60,7 @@ use crate::script_runtime::{
|
|||
ThreadSafeJSContext,
|
||||
};
|
||||
use crate::task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue};
|
||||
use crate::task_source::networking::NetworkingTaskSource;
|
||||
use crate::task_source::TaskSourceName;
|
||||
use crate::task_source::{TaskSource, 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
|
||||
|
@ -192,7 +191,7 @@ pub struct DedicatedWorkerGlobalScope {
|
|||
worker: DomRefCell<Option<TrustedWorkerAddress>>,
|
||||
#[ignore_malloc_size_of = "Can't measure trait objects"]
|
||||
/// Sender to the parent thread.
|
||||
parent_sender: Box<dyn ScriptChan + Send>,
|
||||
parent_sender: Box<dyn ScriptChan>,
|
||||
#[ignore_malloc_size_of = "Arc"]
|
||||
#[no_trace]
|
||||
image_cache: Arc<dyn ImageCache>,
|
||||
|
@ -381,13 +380,14 @@ impl DedicatedWorkerGlobalScope {
|
|||
.origin(origin);
|
||||
|
||||
let runtime = unsafe {
|
||||
let task_source = NetworkingTaskSource(
|
||||
Box::new(WorkerThreadWorkerChan {
|
||||
let task_source = TaskSource {
|
||||
sender: Box::new(WorkerThreadWorkerChan {
|
||||
sender: own_sender.clone(),
|
||||
worker: worker.clone(),
|
||||
}),
|
||||
pipeline_id,
|
||||
);
|
||||
name: TaskSourceName::Networking,
|
||||
};
|
||||
Runtime::new_with_parent(Some(parent), Some(task_source))
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue