mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01: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> {
|
fn ReportMemory(&self, comp: InRealm, can_gc: CanGc) -> Rc<Promise> {
|
||||||
let global = &self.global();
|
let global = &self.global();
|
||||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
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();
|
let script_to_constellation_chan = global.script_to_constellation_chan();
|
||||||
if script_to_constellation_chan
|
if script_to_constellation_chan
|
||||||
.send(ScriptToConstellationMessage::ReportMemory(sender))
|
.send(ScriptToConstellationMessage::ReportMemory(sender))
|
||||||
|
|
|
@ -56,7 +56,9 @@ impl GPUMethods<crate::DomTypeHolder> for GPU {
|
||||||
) -> Rc<Promise> {
|
) -> Rc<Promise> {
|
||||||
let global = &self.global();
|
let global = &self.global();
|
||||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
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 {
|
let power_preference = match options.powerPreference {
|
||||||
Some(GPUPowerPreference::Low_power) => PowerPreference::LowPower,
|
Some(GPUPowerPreference::Low_power) => PowerPreference::LowPower,
|
||||||
Some(GPUPowerPreference::High_performance) => PowerPreference::HighPerformance,
|
Some(GPUPowerPreference::High_performance) => PowerPreference::HighPerformance,
|
||||||
|
|
|
@ -117,7 +117,11 @@ impl GPUAdapterMethods<crate::DomTypeHolder> for GPUAdapter {
|
||||||
) -> Rc<Promise> {
|
) -> Rc<Promise> {
|
||||||
// Step 2
|
// Step 2
|
||||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
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();
|
let mut required_features = wgpu_types::Features::empty();
|
||||||
for &ext in descriptor.requiredFeatures.iter() {
|
for &ext in descriptor.requiredFeatures.iter() {
|
||||||
if let Some(feature) = gpu_to_wgt_feature(ext) {
|
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 {
|
if let Err(e) = self.channel.0.send(WebGPURequest::BufferMapAsync {
|
||||||
sender,
|
sender,
|
||||||
buffer_id: self.buffer.0,
|
buffer_id: self.buffer.0,
|
||||||
|
|
|
@ -470,7 +470,11 @@ impl GPUDeviceMethods<crate::DomTypeHolder> for GPUDevice {
|
||||||
can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) -> Rc<Promise> {
|
) -> Rc<Promise> {
|
||||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
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));
|
GPUComputePipeline::create(self, descriptor, Some(sender));
|
||||||
promise
|
promise
|
||||||
}
|
}
|
||||||
|
@ -518,7 +522,11 @@ impl GPUDeviceMethods<crate::DomTypeHolder> for GPUDevice {
|
||||||
) -> Fallible<Rc<Promise>> {
|
) -> Fallible<Rc<Promise>> {
|
||||||
let (implicit_ids, desc) = self.parse_render_pipeline(descriptor)?;
|
let (implicit_ids, desc) = self.parse_render_pipeline(descriptor)?;
|
||||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
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))?;
|
GPURenderPipeline::create(self, implicit_ids, desc, Some(sender))?;
|
||||||
Ok(promise)
|
Ok(promise)
|
||||||
}
|
}
|
||||||
|
@ -549,7 +557,11 @@ impl GPUDeviceMethods<crate::DomTypeHolder> for GPUDevice {
|
||||||
/// <https://gpuweb.github.io/gpuweb/#dom-gpudevice-poperrorscope>
|
/// <https://gpuweb.github.io/gpuweb/#dom-gpudevice-poperrorscope>
|
||||||
fn PopErrorScope(&self, comp: InRealm, can_gc: CanGc) -> Rc<Promise> {
|
fn PopErrorScope(&self, comp: InRealm, can_gc: CanGc) -> Rc<Promise> {
|
||||||
let promise = Promise::new_in_current_realm(comp, can_gc);
|
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
|
if self
|
||||||
.channel
|
.channel
|
||||||
.0
|
.0
|
||||||
|
|
|
@ -200,7 +200,9 @@ impl GPUQueueMethods<crate::DomTypeHolder> for GPUQueue {
|
||||||
fn OnSubmittedWorkDone(&self, can_gc: CanGc) -> Rc<Promise> {
|
fn OnSubmittedWorkDone(&self, can_gc: CanGc) -> Rc<Promise> {
|
||||||
let global = self.global();
|
let global = self.global();
|
||||||
let promise = Promise::new(&global, can_gc);
|
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
|
if let Err(e) = self
|
||||||
.channel
|
.channel
|
||||||
.0
|
.0
|
||||||
|
|
|
@ -95,7 +95,14 @@ impl GPUShaderModule {
|
||||||
promise.clone(),
|
promise.clone(),
|
||||||
can_gc,
|
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
|
device
|
||||||
.channel()
|
.channel()
|
||||||
.0
|
.0
|
||||||
|
|
|
@ -10,9 +10,10 @@ use serde::Serialize;
|
||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
|
|
||||||
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
|
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::dom::promise::Promise;
|
||||||
use crate::script_runtime::CanGc;
|
use crate::script_runtime::CanGc;
|
||||||
|
use crate::task_source::TaskSource;
|
||||||
|
|
||||||
pub(crate) trait RoutedPromiseListener<R: Serialize + DeserializeOwned + Send> {
|
pub(crate) trait RoutedPromiseListener<R: Serialize + DeserializeOwned + Send> {
|
||||||
fn handle_response(&self, response: R, promise: &Rc<Promise>, can_gc: CanGc);
|
fn handle_response(&self, response: R, promise: &Rc<Promise>, can_gc: CanGc);
|
||||||
|
@ -44,13 +45,10 @@ pub(crate) fn route_promise<
|
||||||
>(
|
>(
|
||||||
promise: &Rc<Promise>,
|
promise: &Rc<Promise>,
|
||||||
receiver: &T,
|
receiver: &T,
|
||||||
|
task_source: TaskSource,
|
||||||
) -> IpcSender<R> {
|
) -> IpcSender<R> {
|
||||||
let (action_sender, action_receiver) = ipc::channel().unwrap();
|
let (action_sender, action_receiver) = ipc::channel().unwrap();
|
||||||
let task_source = receiver
|
let task_source = task_source.to_sendable();
|
||||||
.global()
|
|
||||||
.task_manager()
|
|
||||||
.dom_manipulation_task_source()
|
|
||||||
.to_sendable();
|
|
||||||
let mut trusted: Option<TrustedPromise> = Some(TrustedPromise::new(promise.clone()));
|
let mut trusted: Option<TrustedPromise> = Some(TrustedPromise::new(promise.clone()));
|
||||||
let trusted_receiver = Trusted::new(receiver);
|
let trusted_receiver = Trusted::new(receiver);
|
||||||
ROUTER.add_typed_route(
|
ROUTER.add_typed_route(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue