mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00: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
|
@ -148,11 +148,11 @@ use crate::microtask::{Microtask, MicrotaskQueue};
|
|||
use crate::realms::enter_realm;
|
||||
use crate::script_module::ScriptFetchOptions;
|
||||
use crate::script_runtime::{
|
||||
CanGc, CommonScriptMsg, JSContext, Runtime, ScriptThreadEventCategory, ThreadSafeJSContext,
|
||||
CanGc, CommonScriptMsg, JSContext, Runtime, ScriptChan, ScriptThreadEventCategory,
|
||||
ThreadSafeJSContext,
|
||||
};
|
||||
use crate::task_manager::TaskManager;
|
||||
use crate::task_queue::TaskQueue;
|
||||
use crate::task_source::networking::NetworkingTaskSource;
|
||||
use crate::task_source::{TaskSource, TaskSourceName};
|
||||
use crate::{devtools, webdriver_handlers};
|
||||
|
||||
|
@ -690,6 +690,7 @@ impl ScriptThread {
|
|||
}
|
||||
});
|
||||
global
|
||||
.task_manager()
|
||||
.dom_manipulation_task_source()
|
||||
.queue(task, global.upcast())
|
||||
.expect("Enqueing navigate js task on the DOM manipulation task source failed");
|
||||
|
@ -901,10 +902,11 @@ impl ScriptThread {
|
|||
|
||||
let (self_sender, self_receiver) = unbounded();
|
||||
let self_sender = MainThreadScriptChan(self_sender.clone());
|
||||
let runtime = Runtime::new(Some(NetworkingTaskSource(
|
||||
Box::new(self_sender.clone()),
|
||||
state.id,
|
||||
)));
|
||||
let runtime = Runtime::new(Some(TaskSource {
|
||||
sender: self_sender.as_boxed(),
|
||||
pipeline_id: state.id,
|
||||
name: TaskSourceName::Networking,
|
||||
}));
|
||||
let cx = runtime.cx();
|
||||
|
||||
unsafe {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue