mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
script: add TaskSource
argument to route_promise
(#36831)
Added task_source argument to route_promise, enabling callers to pick the correct TaskSource. Testing: No testing required, straightforward refactor Fixes: #36825 Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
This commit is contained in:
parent
1e8896800a
commit
7e2d2ed0ce
8 changed files with 46 additions and 15 deletions
|
@ -43,7 +43,9 @@ impl ServoInternalsMethods<crate::DomTypeHolder> for ServoInternals {
|
|||
fn ReportMemory(&self, comp: InRealm, can_gc: CanGc) -> Rc<Promise> {
|
||||
let global = &self.global();
|
||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let task_source = global.task_manager().dom_manipulation_task_source();
|
||||
let sender = route_promise(&promise, self, task_source);
|
||||
|
||||
let script_to_constellation_chan = global.script_to_constellation_chan();
|
||||
if script_to_constellation_chan
|
||||
.send(ScriptToConstellationMessage::ReportMemory(sender))
|
||||
|
|
|
@ -56,7 +56,9 @@ impl GPUMethods<crate::DomTypeHolder> for GPU {
|
|||
) -> Rc<Promise> {
|
||||
let global = &self.global();
|
||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let task_source = global.task_manager().dom_manipulation_task_source();
|
||||
let sender = route_promise(&promise, self, task_source);
|
||||
|
||||
let power_preference = match options.powerPreference {
|
||||
Some(GPUPowerPreference::Low_power) => PowerPreference::LowPower,
|
||||
Some(GPUPowerPreference::High_performance) => PowerPreference::HighPerformance,
|
||||
|
|
|
@ -117,7 +117,11 @@ impl GPUAdapterMethods<crate::DomTypeHolder> for GPUAdapter {
|
|||
) -> Rc<Promise> {
|
||||
// Step 2
|
||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let sender = route_promise(
|
||||
&promise,
|
||||
self,
|
||||
self.global().task_manager().dom_manipulation_task_source(),
|
||||
);
|
||||
let mut required_features = wgpu_types::Features::empty();
|
||||
for &ext in descriptor.requiredFeatures.iter() {
|
||||
if let Some(feature) = gpu_to_wgt_feature(ext) {
|
||||
|
|
|
@ -271,7 +271,11 @@ impl GPUBufferMethods<crate::DomTypeHolder> for GPUBuffer {
|
|||
},
|
||||
};
|
||||
|
||||
let sender = route_promise(&promise, self);
|
||||
let sender = route_promise(
|
||||
&promise,
|
||||
self,
|
||||
self.global().task_manager().dom_manipulation_task_source(),
|
||||
);
|
||||
if let Err(e) = self.channel.0.send(WebGPURequest::BufferMapAsync {
|
||||
sender,
|
||||
buffer_id: self.buffer.0,
|
||||
|
|
|
@ -470,7 +470,11 @@ impl GPUDeviceMethods<crate::DomTypeHolder> for GPUDevice {
|
|||
can_gc: CanGc,
|
||||
) -> Rc<Promise> {
|
||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let sender = route_promise(
|
||||
&promise,
|
||||
self,
|
||||
self.global().task_manager().dom_manipulation_task_source(),
|
||||
);
|
||||
GPUComputePipeline::create(self, descriptor, Some(sender));
|
||||
promise
|
||||
}
|
||||
|
@ -518,7 +522,11 @@ impl GPUDeviceMethods<crate::DomTypeHolder> for GPUDevice {
|
|||
) -> Fallible<Rc<Promise>> {
|
||||
let (implicit_ids, desc) = self.parse_render_pipeline(descriptor)?;
|
||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let sender = route_promise(
|
||||
&promise,
|
||||
self,
|
||||
self.global().task_manager().dom_manipulation_task_source(),
|
||||
);
|
||||
GPURenderPipeline::create(self, implicit_ids, desc, Some(sender))?;
|
||||
Ok(promise)
|
||||
}
|
||||
|
@ -549,7 +557,11 @@ impl GPUDeviceMethods<crate::DomTypeHolder> for GPUDevice {
|
|||
/// <https://gpuweb.github.io/gpuweb/#dom-gpudevice-poperrorscope>
|
||||
fn PopErrorScope(&self, comp: InRealm, can_gc: CanGc) -> Rc<Promise> {
|
||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let sender = route_promise(
|
||||
&promise,
|
||||
self,
|
||||
self.global().task_manager().dom_manipulation_task_source(),
|
||||
);
|
||||
if self
|
||||
.channel
|
||||
.0
|
||||
|
|
|
@ -200,7 +200,9 @@ impl GPUQueueMethods<crate::DomTypeHolder> for GPUQueue {
|
|||
fn OnSubmittedWorkDone(&self, can_gc: CanGc) -> Rc<Promise> {
|
||||
let global = self.global();
|
||||
let promise = Promise::new(&global, can_gc);
|
||||
let sender = route_promise(&promise, self);
|
||||
let task_source = global.task_manager().dom_manipulation_task_source();
|
||||
let sender = route_promise(&promise, self, task_source);
|
||||
|
||||
if let Err(e) = self
|
||||
.channel
|
||||
.0
|
||||
|
|
|
@ -95,7 +95,14 @@ impl GPUShaderModule {
|
|||
promise.clone(),
|
||||
can_gc,
|
||||
);
|
||||
let sender = route_promise(&promise, &*shader_module);
|
||||
let sender = route_promise(
|
||||
&promise,
|
||||
&*shader_module,
|
||||
device
|
||||
.global()
|
||||
.task_manager()
|
||||
.dom_manipulation_task_source(),
|
||||
);
|
||||
device
|
||||
.channel()
|
||||
.0
|
||||
|
|
|
@ -10,9 +10,10 @@ use serde::Serialize;
|
|||
use serde::de::DeserializeOwned;
|
||||
|
||||
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
|
||||
use crate::dom::bindings::reflector::{DomGlobal, DomObject};
|
||||
use crate::dom::bindings::reflector::DomObject;
|
||||
use crate::dom::promise::Promise;
|
||||
use crate::script_runtime::CanGc;
|
||||
use crate::task_source::TaskSource;
|
||||
|
||||
pub(crate) trait RoutedPromiseListener<R: Serialize + DeserializeOwned + Send> {
|
||||
fn handle_response(&self, response: R, promise: &Rc<Promise>, can_gc: CanGc);
|
||||
|
@ -44,13 +45,10 @@ pub(crate) fn route_promise<
|
|||
>(
|
||||
promise: &Rc<Promise>,
|
||||
receiver: &T,
|
||||
task_source: TaskSource,
|
||||
) -> IpcSender<R> {
|
||||
let (action_sender, action_receiver) = ipc::channel().unwrap();
|
||||
let task_source = receiver
|
||||
.global()
|
||||
.task_manager()
|
||||
.dom_manipulation_task_source()
|
||||
.to_sendable();
|
||||
let task_source = task_source.to_sendable();
|
||||
let mut trusted: Option<TrustedPromise> = Some(TrustedPromise::new(promise.clone()));
|
||||
let trusted_receiver = Trusted::new(receiver);
|
||||
ROUTER.add_typed_route(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue