diff options
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r-- | components/script/script_thread.rs | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 96ea03881d4..e3051a0f8c2 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -34,7 +34,7 @@ use crate::dom::bindings::reflector::DomObject; use crate::dom::bindings::root::ThreadLocalStackRoots; use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom, RootCollection}; use crate::dom::bindings::str::DOMString; -use crate::dom::bindings::trace::JSTraceable; +use crate::dom::bindings::trace::{HashMapTracedValues, JSTraceable}; use crate::dom::customelementregistry::{ CallbackReaction, CustomElementDefinition, CustomElementReactionStack, }; @@ -185,26 +185,36 @@ pub unsafe fn trace_thread(tr: *mut JSTracer) { #[derive(JSTraceable)] struct InProgressLoad { /// The pipeline which requested this load. + #[no_trace] pipeline_id: PipelineId, /// The browsing context being loaded into. + #[no_trace] browsing_context_id: BrowsingContextId, /// The top level ancestor browsing context. + #[no_trace] top_level_browsing_context_id: TopLevelBrowsingContextId, /// The parent pipeline and frame type associated with this load, if any. + #[no_trace] parent_info: Option<PipelineId>, /// The opener, if this is an auxiliary. + #[no_trace] opener: Option<BrowsingContextId>, /// The current window size associated with this pipeline. + #[no_trace] window_size: WindowSizeData, /// Channel to the layout thread associated with this pipeline. + #[no_trace] layout_chan: Sender<message::Msg>, /// The activity level of the document (inactive, active or fully active). + #[no_trace] activity: DocumentActivity, /// Window is visible. is_visible: bool, /// The requested URL of the load. + #[no_trace] url: ServoUrl, /// The origin for the document + #[no_trace] origin: MutableOrigin, /// Timestamp reporting the time when the browser started this load. navigation_start: u64, @@ -398,7 +408,7 @@ impl ScriptPort for Receiver<(TrustedServiceWorkerAddress, CommonScriptMsg)> { /// Encapsulates internal communication of shared messages within the script thread. #[derive(JSTraceable)] -pub struct SendableMainThreadScriptChan(pub Sender<CommonScriptMsg>); +pub struct SendableMainThreadScriptChan(#[no_trace] pub Sender<CommonScriptMsg>); impl ScriptChan for SendableMainThreadScriptChan { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { @@ -412,7 +422,7 @@ impl ScriptChan for SendableMainThreadScriptChan { /// Encapsulates internal communication of main thread messages within the script thread. #[derive(JSTraceable)] -pub struct MainThreadScriptChan(pub Sender<MainThreadScriptMsg>); +pub struct MainThreadScriptChan(#[no_trace] pub Sender<MainThreadScriptMsg>); impl ScriptChan for MainThreadScriptChan { fn send(&self, msg: CommonScriptMsg) -> Result<(), ()> { @@ -436,13 +446,13 @@ impl OpaqueSender<CommonScriptMsg> for Sender<MainThreadScriptMsg> { #[derive(JSTraceable)] #[unrooted_must_root_lint::must_root] pub struct Documents { - map: HashMap<PipelineId, Dom<Document>>, + map: HashMapTracedValues<PipelineId, Dom<Document>>, } impl Documents { pub fn new() -> Documents { Documents { - map: HashMap::new(), + map: HashMapTracedValues::new(), } } @@ -522,17 +532,20 @@ pub struct ScriptThread { documents: DomRefCell<Documents>, /// The window proxies known by this thread /// TODO: this map grows, but never shrinks. Issue #15258. - window_proxies: DomRefCell<HashMap<BrowsingContextId, Dom<WindowProxy>>>, + window_proxies: DomRefCell<HashMapTracedValues<BrowsingContextId, Dom<WindowProxy>>>, /// A list of data pertaining to loads that have not yet received a network response incomplete_loads: DomRefCell<Vec<InProgressLoad>>, /// A vector containing parser contexts which have not yet been fully processed incomplete_parser_contexts: IncompleteParserContexts, /// Image cache for this script thread. + #[no_trace] image_cache: Arc<dyn ImageCache>, /// A handle to the resource thread. This is an `Arc` to avoid running out of file descriptors if /// there are many iframes. + #[no_trace] resource_threads: ResourceThreads, /// A handle to the bluetooth thread. + #[no_trace] bluetooth_thread: IpcSender<BluetoothRequest>, /// A queue of tasks to be executed in this script-thread. @@ -551,12 +564,15 @@ pub struct ScriptThread { dom_manipulation_task_sender: Box<dyn ScriptChan>, + #[no_trace] media_element_task_sender: Sender<MainThreadScriptMsg>, + #[no_trace] user_interaction_task_sender: Sender<MainThreadScriptMsg>, networking_task_sender: Box<dyn ScriptChan>, + #[no_trace] history_traversal_task_sender: Sender<MainThreadScriptMsg>, file_reading_task_sender: Box<dyn ScriptChan>, @@ -570,34 +586,45 @@ pub struct ScriptThread { remote_event_task_sender: Box<dyn ScriptChan>, /// A channel to hand out to threads that need to respond to a message from the script thread. + #[no_trace] control_chan: IpcSender<ConstellationControlMsg>, /// The port on which the constellation and layout threads can communicate with the /// script thread. + #[no_trace] control_port: Receiver<ConstellationControlMsg>, /// For communicating load url messages to the constellation + #[no_trace] script_sender: IpcSender<(PipelineId, ScriptMsg)>, /// A sender for new layout threads to communicate to the constellation. + #[no_trace] layout_to_constellation_chan: IpcSender<LayoutMsg>, /// The port on which we receive messages from the image cache + #[no_trace] image_cache_port: Receiver<ImageCacheMsg>, /// The channel on which the image cache can send messages to ourself. + #[no_trace] image_cache_channel: Sender<ImageCacheMsg>, /// For providing contact with the time profiler. + #[no_trace] time_profiler_chan: profile_time::ProfilerChan, /// For providing contact with the memory profiler. + #[no_trace] mem_profiler_chan: profile_mem::ProfilerChan, /// For providing instructions to an optional devtools server. + #[no_trace] devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, /// For receiving commands from an optional devtools server. Will be ignored if /// no such server exists. + #[no_trace] devtools_port: Receiver<DevtoolScriptControlMsg>, + #[no_trace] devtools_sender: IpcSender<DevtoolScriptControlMsg>, /// The JavaScript runtime. @@ -607,10 +634,13 @@ pub struct ScriptThread { topmost_mouse_over_target: MutNullableDom<Element>, /// List of pipelines that have been owned and closed by this script thread. + #[no_trace] closed_pipelines: DomRefCell<HashSet<PipelineId>>, + #[no_trace] scheduler_chan: IpcSender<TimerSchedulerMsg>, + #[no_trace] content_process_shutdown_chan: Sender<()>, /// <https://html.spec.whatwg.org/multipage/#microtask-queue> @@ -623,9 +653,11 @@ pub struct ScriptThread { mutation_observers: DomRefCell<Vec<Dom<MutationObserver>>>, /// A handle to the WebGL thread + #[no_trace] webgl_chan: Option<WebGLPipeline>, /// The WebXR device registry + #[no_trace] webxr_registry: webxr_api::Registry, /// The worklet thread pool @@ -639,9 +671,11 @@ pub struct ScriptThread { custom_element_reaction_stack: CustomElementReactionStack, /// The Webrender Document ID associated with this thread. + #[no_trace] webrender_document: DocumentId, /// Webrender API sender. + #[no_trace] webrender_api_sender: WebrenderIpcSender, /// Periodically print out on which events script threads spend their processing time. @@ -678,9 +712,11 @@ pub struct ScriptThread { user_agent: Cow<'static, str>, /// Application window's GL Context for Media player + #[no_trace] player_context: WindowGLContext, /// A mechanism to force the compositor's event loop to process events. + #[no_trace] event_loop_waker: Option<Box<dyn EventLoopWaker>>, /// A set of all nodes ever created in this script thread @@ -690,9 +726,11 @@ pub struct ScriptThread { is_user_interacting: Cell<bool>, /// Identity manager for WebGPU resources + #[no_trace] gpu_id_hub: Arc<Mutex<Identities>>, /// Receiver to receive commands from optional WebGPU server. + #[no_trace] webgpu_port: RefCell<Option<Receiver<WebGPUMsg>>>, // Secure context @@ -1297,7 +1335,7 @@ impl ScriptThread { ScriptThread { documents: DomRefCell::new(Documents::new()), - window_proxies: DomRefCell::new(HashMap::new()), + window_proxies: DomRefCell::new(HashMapTracedValues::new()), incomplete_loads: DomRefCell::new(vec![]), incomplete_parser_contexts: IncompleteParserContexts(RefCell::new(vec![])), |