on master help sign in
Move the events trampoline into the vdom
0191972Nick Fitzgerald
src/change_list.rs+2−7
@@ -56,7 +56,6 @@ pub(crate) struct ChangeList {
56 strings_cache: FxHashMap<String, StringsCacheEntry>,
56 strings_cache: FxHashMap<String, StringsCacheEntry>,
57 next_string_key: u32,
57 next_string_key: u32,
58 interpreter: js::ChangeListInterpreter,
58 interpreter: js::ChangeListInterpreter,
59− events_trampoline: Option<crate::EventsTrampoline>,
60}
59}
61
60
62impl Drop for ChangeList {
61impl Drop for ChangeList {
@@ -71,7 +70,6 @@ impl fmt::Debug for ChangeList {
71 f.debug_struct("ChangeList")
70 f.debug_struct("ChangeList")
72 .field("bump", &self.bump)
71 .field("bump", &self.bump)
73 .field("interpreter", &self.interpreter)
72 .field("interpreter", &self.interpreter)
74− .field("events_trampoline", &"..")
75 .finish()
73 .finish()
76 }
74 }
77}
75}
@@ -86,14 +84,11 @@ impl ChangeList {
86 strings_cache,
84 strings_cache,
87 next_string_key: 0,
85 next_string_key: 0,
88 interpreter,
86 interpreter,
89− events_trampoline: None,
90 }
87 }
91 }
88 }
92
89
93− pub(crate) fn init_events_trampoline(&mut self, trampoline: crate::EventsTrampoline) {
90+ pub(crate) fn init_events_trampoline(&mut self, trampoline: &crate::EventsTrampoline) {
94− debug_assert!(self.events_trampoline.is_none());
95− self.interpreter.init_events_trampoline(&trampoline);
91+ self.interpreter.init_events_trampoline(trampoline);
96− self.events_trampoline = Some(trampoline);
97 }
92 }
98}
93}
99
94
src/vdom.rs+6−1
@@ -59,6 +59,7 @@ pub(crate) struct VdomInnerExclusive {
59 change_list: ManuallyDrop<ChangeList>,
59 change_list: ManuallyDrop<ChangeList>,
60 container: crate::Element,
60 container: crate::Element,
61 events_registry: Option<Rc<RefCell<EventsRegistry>>>,
61 events_registry: Option<Rc<RefCell<EventsRegistry>>>,
62+ events_trampoline: Option<crate::EventsTrampoline>,
62 cached_set: crate::RefCell<CachedSet>,
63 cached_set: crate::RefCell<CachedSet>,
63
64
64 // Actually a reference into `self.dom_buffers[0]` or if `self.component` is
65 // Actually a reference into `self.dom_buffers[0]` or if `self.component` is
@@ -92,6 +93,7 @@ impl fmt::Debug for VdomInnerExclusive {
92 .field("change_list", &self.change_list)
93 .field("change_list", &self.change_list)
93 .field("container", &self.container)
94 .field("container", &self.container)
94 .field("events_registry", &self.events_registry)
95 .field("events_registry", &self.events_registry)
96+ .field("events_trampoline", &"..")
95 .field("current_root", &self.current_root)
97 .field("current_root", &self.current_root)
96 .finish()
98 .finish()
97 }
99 }
@@ -179,6 +181,7 @@ impl Vdom {
179 container,
181 container,
180 current_root,
182 current_root,
181 events_registry: None,
183 events_registry: None,
184+ events_trampoline: None,
182 cached_set: crate::RefCell::new(Default::default()),
185 cached_set: crate::RefCell::new(Default::default()),
183 }),
186 }),
184 });
187 });
@@ -188,7 +191,9 @@ impl Vdom {
188 {
191 {
189 let mut inner = inner.exclusive.borrow_mut();
192 let mut inner = inner.exclusive.borrow_mut();
190 inner.events_registry = Some(events_registry);
193 inner.events_registry = Some(events_registry);
191− inner.change_list.init_events_trampoline(events_trampoline);
194+ inner.change_list.init_events_trampoline(&events_trampoline);
195+ debug_assert!(inner.events_trampoline.is_none());
196+ inner.events_trampoline = Some(events_trampoline);
192
197
193 // Diff and apply the `contents` against our dummy `<div/>`.
198 // Diff and apply the `contents` against our dummy `<div/>`.
194 inner.render();
199 inner.render();