diff options
author | Samson <16504129+sagudev@users.noreply.github.com> | 2023-08-04 12:17:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-04 10:17:43 +0000 |
commit | 9514f670d12b4d92514c1402d686e694f3f234a5 (patch) | |
tree | cd847449b332ac27b6018fbe8a83a248af020c5a /components/script/dom/htmlformelement.rs | |
parent | 66e0d543cfbaecb08ade2e071d6575f9f72f4dbb (diff) | |
download | servo-9514f670d12b4d92514c1402d686e694f3f234a5.tar.gz servo-9514f670d12b4d92514c1402d686e694f3f234a5.zip |
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
Diffstat (limited to 'components/script/dom/htmlformelement.rs')
-rw-r--r-- | components/script/dom/htmlformelement.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 7594026046c..9a1cdc40555 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -76,11 +76,12 @@ use style::element_state::ElementState; use style::str::split_html_space_chars; use crate::dom::bindings::codegen::UnionTypes::RadioNodeListOrElement; -use std::collections::HashMap; use time::{now, Duration, Tm}; use crate::dom::bindings::codegen::Bindings::NodeBinding::{NodeConstants, NodeMethods}; +use super::bindings::trace::{HashMapTracedValues, NoTrace}; + #[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)] pub struct GenerationId(u32); @@ -93,7 +94,7 @@ pub struct HTMLFormElement { elements: DomOnceCell<HTMLFormControlsCollection>, generation_id: Cell<GenerationId>, controls: DomRefCell<Vec<Dom<Element>>>, - past_names_map: DomRefCell<HashMap<Atom, (Dom<Element>, Tm)>>, + past_names_map: DomRefCell<HashMapTracedValues<Atom, (Dom<Element>, NoTrace<Tm>)>>, firing_submission_events: Cell<bool>, rel_list: MutNullableDom<DOMTokenList>, } @@ -116,7 +117,7 @@ impl HTMLFormElement { elements: Default::default(), generation_id: Cell::new(GenerationId(0)), controls: DomRefCell::new(Vec::new()), - past_names_map: DomRefCell::new(HashMap::new()), + past_names_map: DomRefCell::new(HashMapTracedValues::new()), firing_submission_events: Cell::new(false), rel_list: Default::default(), } @@ -441,7 +442,7 @@ impl HTMLFormElementMethods for HTMLFormElement { name, ( Dom::from_ref(&*element_node.downcast::<Element>().unwrap()), - now(), + NoTrace(now()), ), ); @@ -555,7 +556,7 @@ impl HTMLFormElementMethods for HTMLFormElement { let entry = SourcedName { name: key.clone(), element: DomRoot::from_ref(&*val.0), - source: SourcedNameSource::Past(now() - val.1), // calculate difference now()-val.1 to find age + source: SourcedNameSource::Past(now() - val.1 .0), // calculate difference now()-val.1 to find age }; sourced_names_vec.push(entry); } @@ -1336,7 +1337,7 @@ impl HTMLFormElement { // changes form owner, then its entries must be removed // from that map." let mut past_names_map = self.past_names_map.borrow_mut(); - past_names_map.retain(|_k, v| v.0 != control); + past_names_map.0.retain(|_k, v| v.0 != control); } self.update_validity(); } |