mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
refactor: add CanGc as argument to Promise::resolve (#35616)
Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
This commit is contained in:
parent
adb831eefe
commit
0383ba9a5b
57 changed files with 330 additions and 294 deletions
|
@ -214,7 +214,7 @@ impl XRSession {
|
|||
let time = CrossProcessInstant::now();
|
||||
let this = this.clone();
|
||||
task_source.queue(task!(xr_raf_callback: move || {
|
||||
this.root().raf_callback(frame, time);
|
||||
this.root().raf_callback(frame, time, CanGc::note());
|
||||
}));
|
||||
}),
|
||||
);
|
||||
|
@ -286,7 +286,7 @@ impl XRSession {
|
|||
// Step 6 is happening n the XR session
|
||||
// https://immersive-web.github.io/webxr/#dom-xrsession-end step 3
|
||||
for promise in self.end_promises.borrow_mut().drain(..) {
|
||||
promise.resolve_native(&());
|
||||
promise.resolve_native(&(), can_gc);
|
||||
}
|
||||
// Step 7
|
||||
let event =
|
||||
|
@ -410,7 +410,7 @@ impl XRSession {
|
|||
}
|
||||
|
||||
/// <https://immersive-web.github.io/webxr/#xr-animation-frame>
|
||||
fn raf_callback(&self, mut frame: Frame, time: CrossProcessInstant) {
|
||||
fn raf_callback(&self, mut frame: Frame, time: CrossProcessInstant, can_gc: CanGc) {
|
||||
debug!("WebXR RAF callback {:?}", frame);
|
||||
|
||||
// Step 1-2 happen in the xebxr device thread
|
||||
|
@ -430,7 +430,7 @@ impl XRSession {
|
|||
|
||||
// TODO: how does this fit the webxr spec?
|
||||
for event in frame.events.drain(..) {
|
||||
self.handle_frame_event(event);
|
||||
self.handle_frame_event(event, can_gc);
|
||||
}
|
||||
|
||||
// Step 4
|
||||
|
@ -575,16 +575,14 @@ impl XRSession {
|
|||
}
|
||||
}
|
||||
|
||||
fn handle_frame_event(&self, event: FrameUpdateEvent) {
|
||||
fn handle_frame_event(&self, event: FrameUpdateEvent, can_gc: CanGc) {
|
||||
match event {
|
||||
FrameUpdateEvent::HitTestSourceAdded(id) => {
|
||||
if let Some(promise) = self.pending_hit_test_promises.borrow_mut().remove(&id) {
|
||||
promise.resolve_native(&XRHitTestSource::new(
|
||||
&self.global(),
|
||||
id,
|
||||
self,
|
||||
CanGc::note(),
|
||||
));
|
||||
promise.resolve_native(
|
||||
&XRHitTestSource::new(&self.global(), id, self, can_gc),
|
||||
can_gc,
|
||||
);
|
||||
} else {
|
||||
warn!(
|
||||
"received hit test add request for unknown hit test {:?}",
|
||||
|
@ -868,13 +866,13 @@ impl XRSessionMethods<crate::DomTypeHolder> for XRSession {
|
|||
self.reference_spaces
|
||||
.borrow_mut()
|
||||
.push(Dom::from_ref(space.reference_space()));
|
||||
p.resolve_native(&space);
|
||||
p.resolve_native(&space, can_gc);
|
||||
} else {
|
||||
let space = XRReferenceSpace::new(&self.global(), self, ty, can_gc);
|
||||
self.reference_spaces
|
||||
.borrow_mut()
|
||||
.push(Dom::from_ref(&*space));
|
||||
p.resolve_native(&space);
|
||||
p.resolve_native(&space, can_gc);
|
||||
}
|
||||
},
|
||||
}
|
||||
|
@ -900,7 +898,7 @@ impl XRSessionMethods<crate::DomTypeHolder> for XRSession {
|
|||
//
|
||||
// However, if end_promises is empty, then all end() promises have already resolved,
|
||||
// so the session has completely shut down and we should not queue up more promises
|
||||
p.resolve_native(&());
|
||||
p.resolve_native(&(), can_gc);
|
||||
return p;
|
||||
}
|
||||
self.end_promises.borrow_mut().push(p.clone());
|
||||
|
@ -1065,7 +1063,7 @@ impl XRSessionMethods<crate::DomTypeHolder> for XRSession {
|
|||
let session = this.root();
|
||||
session.apply_nominal_framerate(message.unwrap(), CanGc::note());
|
||||
if let Some(promise) = session.update_framerate_promise.borrow_mut().take() {
|
||||
promise.resolve_native(&());
|
||||
promise.resolve_native(&(), CanGc::note());
|
||||
};
|
||||
}));
|
||||
}),
|
||||
|
|
|
@ -258,7 +258,7 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
|
|||
return;
|
||||
};
|
||||
task_source.queue(task!(request_session: move || {
|
||||
this.root().session_obtained(message, trusted.root(), mode, frame_receiver);
|
||||
this.root().session_obtained(message, trusted.root(), mode, frame_receiver, CanGc::note());
|
||||
}));
|
||||
}),
|
||||
);
|
||||
|
@ -282,6 +282,7 @@ impl XRSystem {
|
|||
promise: Rc<Promise>,
|
||||
mode: XRSessionMode,
|
||||
frame_receiver: IpcReceiver<Frame>,
|
||||
can_gc: CanGc,
|
||||
) {
|
||||
let session = match response {
|
||||
Ok(session) => session,
|
||||
|
@ -302,7 +303,7 @@ impl XRSystem {
|
|||
} else {
|
||||
self.set_active_immersive_session(&session);
|
||||
}
|
||||
promise.resolve_native(&session);
|
||||
promise.resolve_native(&session, can_gc);
|
||||
// https://github.com/immersive-web/webxr/issues/961
|
||||
// This must be called _after_ the promise is resolved
|
||||
session.setup_initial_inputs();
|
||||
|
|
|
@ -51,6 +51,7 @@ impl XRTest {
|
|||
&self,
|
||||
response: Result<IpcSender<MockDeviceMsg>, XRError>,
|
||||
trusted: TrustedPromise,
|
||||
can_gc: CanGc,
|
||||
) {
|
||||
let promise = trusted.root();
|
||||
if let Ok(sender) = response {
|
||||
|
@ -58,7 +59,7 @@ impl XRTest {
|
|||
self.devices_connected
|
||||
.borrow_mut()
|
||||
.push(Dom::from_ref(&device));
|
||||
promise.resolve_native(&device);
|
||||
promise.resolve_native(&device, can_gc);
|
||||
} else {
|
||||
promise.reject_native(&());
|
||||
}
|
||||
|
@ -167,7 +168,7 @@ impl XRTestMethods<crate::DomTypeHolder> for XRTest {
|
|||
message.expect("SimulateDeviceConnection callback given incorrect payload");
|
||||
|
||||
task_source.queue(task!(request_session: move || {
|
||||
this.root().device_obtained(message, trusted);
|
||||
this.root().device_obtained(message, trusted, CanGc::note());
|
||||
}));
|
||||
}),
|
||||
);
|
||||
|
@ -193,7 +194,7 @@ impl XRTestMethods<crate::DomTypeHolder> for XRTest {
|
|||
let p = Promise::new(&global, can_gc);
|
||||
let mut devices = self.devices_connected.borrow_mut();
|
||||
if devices.is_empty() {
|
||||
p.resolve_native(&());
|
||||
p.resolve_native(&(), can_gc);
|
||||
} else {
|
||||
let mut len = devices.len();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue