mirror of
https://github.com/servo/servo.git
synced 2025-08-10 16:05:43 +01:00
No tracing of nop traceable fields (#29926)
* Add `no_trace` option to JSTraceable derive * NoTrace wrapper * Port some types to no_trace schematics * Fixing my unsafe mistakes (not tracing traceables) * Add docs & safety guards for no_trace Safety guards (trait shenanigans) guarantees safety usage of `no_trace` * Port canvas_traits to no_trace * Port servo_media to no_trace * Port net_traits to no_trace * Port style to no_trace * Port webgpu to no_trace * Port script_traits to no_trace * Port canvas_traits, devtools_traits, embedder_traits, profile_traits to no_trace * unrooted_must_root lint in seperate file * Add trace_in_no_trace_lint as script_plugin * Composable types in must_not_have_traceable * Introduced HashMapTracedValues wrapper * `HashMap<NoTrace<K>,V>`->`HashMapTracedValues<K,V>` * Port rest of servo's types to no_trace * Port html5ever, euclid, mime and http to no_trace * Port remaining externals to no_trace * Port webxr and Arc<Mutex<_>> * Fix spelling in notrace doc
This commit is contained in:
parent
66e0d543cf
commit
9514f670d1
167 changed files with 1903 additions and 1020 deletions
|
@ -43,7 +43,6 @@ use ipc_channel::router::ROUTER;
|
|||
use metrics::ToMs;
|
||||
use profile_traits::ipc;
|
||||
use std::cell::Cell;
|
||||
use std::collections::HashMap;
|
||||
use std::f64::consts::{FRAC_PI_2, PI};
|
||||
use std::mem;
|
||||
use std::rc::Rc;
|
||||
|
@ -54,6 +53,8 @@ use webxr_api::{
|
|||
View, Viewer, Visibility,
|
||||
};
|
||||
|
||||
use super::bindings::trace::HashMapTracedValues;
|
||||
|
||||
#[dom_struct]
|
||||
pub struct XRSession {
|
||||
eventtarget: EventTarget,
|
||||
|
@ -62,11 +63,13 @@ pub struct XRSession {
|
|||
visibility_state: Cell<XRVisibilityState>,
|
||||
viewer_space: MutNullableDom<XRSpace>,
|
||||
#[ignore_malloc_size_of = "defined in webxr"]
|
||||
#[no_trace]
|
||||
session: DomRefCell<Session>,
|
||||
frame_requested: Cell<bool>,
|
||||
pending_render_state: MutNullableDom<XRRenderState>,
|
||||
active_render_state: MutDom<XRRenderState>,
|
||||
/// Cached projection matrix for inline sessions
|
||||
#[no_trace]
|
||||
inline_projection_matrix: DomRefCell<Transform3D<f32, Viewer, Display>>,
|
||||
|
||||
next_raf_id: Cell<i32>,
|
||||
|
@ -81,9 +84,10 @@ pub struct XRSession {
|
|||
/// https://immersive-web.github.io/webxr/#ended
|
||||
ended: Cell<bool>,
|
||||
#[ignore_malloc_size_of = "defined in webxr"]
|
||||
#[no_trace]
|
||||
next_hit_test_id: Cell<HitTestId>,
|
||||
#[ignore_malloc_size_of = "defined in webxr"]
|
||||
pending_hit_test_promises: DomRefCell<HashMap<HitTestId, Rc<Promise>>>,
|
||||
pending_hit_test_promises: DomRefCell<HashMapTracedValues<HitTestId, Rc<Promise>>>,
|
||||
/// Opaque framebuffers need to know the session is "outside of a requestAnimationFrame"
|
||||
/// https://immersive-web.github.io/webxr/#opaque-framebuffer
|
||||
outside_raf: Cell<bool>,
|
||||
|
@ -115,7 +119,7 @@ impl XRSession {
|
|||
end_promises: DomRefCell::new(vec![]),
|
||||
ended: Cell::new(false),
|
||||
next_hit_test_id: Cell::new(HitTestId(0)),
|
||||
pending_hit_test_promises: DomRefCell::new(HashMap::new()),
|
||||
pending_hit_test_promises: DomRefCell::new(HashMapTracedValues::new()),
|
||||
outside_raf: Cell::new(true),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue