From 9514f670d12b4d92514c1402d686e694f3f234a5 Mon Sep 17 00:00:00 2001 From: Samson <16504129+sagudev@users.noreply.github.com> Date: Fri, 4 Aug 2023 12:17:43 +0200 Subject: 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,V>`->`HashMapTracedValues` * 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> * Fix spelling in notrace doc --- components/script/script_module.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'components/script/script_module.rs') diff --git a/components/script/script_module.rs b/components/script/script_module.rs index 9ba8dd523a0..01fe01e3472 100644 --- a/components/script/script_module.rs +++ b/components/script/script_module.rs @@ -145,7 +145,7 @@ impl ModuleScript { #[derive(Clone, Debug, Eq, Hash, JSTraceable, PartialEq)] pub enum ModuleIdentity { ScriptId(ScriptId), - ModuleUrl(ServoUrl), + ModuleUrl(#[no_trace] ServoUrl), } impl ModuleIdentity { @@ -165,6 +165,7 @@ impl ModuleIdentity { #[derive(JSTraceable)] pub struct ModuleTree { + #[no_trace] url: ServoUrl, text: DomRefCell>, record: DomRefCell>, @@ -178,11 +179,15 @@ pub struct ModuleTree { // (https://infra.spec.whatwg.org/#ordered-map), however we can usually get away with using // stdlib maps and sets because we rarely iterate over them. parent_identities: DomRefCell>, + #[no_trace] descendant_urls: DomRefCell>, // A set to memoize which descendants are under fetching + #[no_trace] incomplete_fetch_urls: DomRefCell>, + #[no_trace] visited_urls: DomRefCell>, rethrow_error: DomRefCell>, + #[no_trace] network_error: DomRefCell>, // A promise for owners to execute when the module tree // is finished @@ -324,7 +329,7 @@ impl ModuleTree { let module_map = global.get_module_map().borrow(); let mut discovered_urls = HashSet::new(); - return ModuleTree::recursive_check_descendants(&self, &module_map, &mut discovered_urls); + return ModuleTree::recursive_check_descendants(&self, &module_map.0, &mut discovered_urls); } // We just leverage the power of Promise to run the task for `finish` the owner. @@ -926,7 +931,7 @@ impl ModuleOwner { let network_error = module_tree.get_network_error().borrow(); match network_error.as_ref() { - Some(network_error) => Err(network_error.clone()), + Some(network_error) => Err(network_error.clone().into()), None => match module_identity { ModuleIdentity::ModuleUrl(script_src) => Ok(ScriptOrigin::external( Rc::clone(&module_tree.get_text().borrow()), @@ -1296,11 +1301,15 @@ pub unsafe extern "C" fn host_import_module_dynamically( #[derive(Clone, JSTraceable, MallocSizeOf)] /// pub struct ScriptFetchOptions { + #[no_trace] pub referrer: Referrer, pub integrity_metadata: String, + #[no_trace] pub credentials_mode: CredentialsMode, pub cryptographic_nonce: String, + #[no_trace] pub parser_metadata: ParserMetadata, + #[no_trace] pub referrer_policy: Option, } -- cgit v1.2.3