wip: more scheduler work
This commit is contained in:
1 parent
1cd5e69712
commit
44b4384961
4 files changed
+16
-10
No files matched your search
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"rust-analyzer.inlayHints.enable": true
|
"rust-analyzer.inlayHints.enable": false
|
||||||
}
|
}
|
||||||
@@ -153,7 +153,7 @@ impl<'bump> DiffMachine<'bump> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn diff_scope(&'bump mut self, id: ScopeId) {
|
pub fn diff_scope(&mut self, id: ScopeId) {
|
||||||
if let Some(component) = self.vdom.get_scope_mut(id) {
|
if let Some(component) = self.vdom.get_scope_mut(id) {
|
||||||
let (old, new) = (component.frames.wip_head(), component.frames.fin_head());
|
let (old, new) = (component.frames.wip_head(), component.frames.fin_head());
|
||||||
self.stack.push(DiffInstruction::DiffNode { new, old });
|
self.stack.push(DiffInstruction::DiffNode { new, old });
|
||||||
|
|||||||
@@ -335,20 +335,20 @@ impl Scheduler {
|
|||||||
///
|
///
|
||||||
/// Will use the standard priority-based scheduling, batching, etc, but just won't interact with the async reactor.
|
/// Will use the standard priority-based scheduling, batching, etc, but just won't interact with the async reactor.
|
||||||
pub fn work_sync<'a>(&'a mut self) -> Vec<Mutations<'a>> {
|
pub fn work_sync<'a>(&'a mut self) -> Vec<Mutations<'a>> {
|
||||||
let mut committed_mutations = Vec::<Mutations<'static>>::new();
|
let mut committed_mutations = Vec::new();
|
||||||
|
|
||||||
// Internalize any pending work since the last time we ran
|
|
||||||
self.manually_poll_events();
|
self.manually_poll_events();
|
||||||
|
|
||||||
if !self.has_any_work() {
|
if !self.has_any_work() {
|
||||||
self.pool.clean_up_garbage();
|
self.pool.clean_up_garbage();
|
||||||
|
return committed_mutations;
|
||||||
}
|
}
|
||||||
|
|
||||||
while self.has_any_work() {
|
self.consume_pending_events();
|
||||||
// do work
|
|
||||||
|
|
||||||
// Create work from the pending event queue
|
while self.has_any_work() {
|
||||||
self.consume_pending_events();
|
self.shift_priorities();
|
||||||
|
self.work_on_current_lane(&mut || false, &mut committed_mutations);
|
||||||
}
|
}
|
||||||
|
|
||||||
committed_mutations
|
committed_mutations
|
||||||
@@ -419,7 +419,9 @@ impl Scheduler {
|
|||||||
committed_mutations
|
committed_mutations
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns true if the lane is finished
|
/// Load the current lane, and work on it, periodically checking in if the deadline has been reached.
|
||||||
|
///
|
||||||
|
/// Returns true if the lane is finished before the deadline could be met.
|
||||||
pub fn work_on_current_lane(
|
pub fn work_on_current_lane(
|
||||||
&mut self,
|
&mut self,
|
||||||
deadline_reached: &mut impl FnMut() -> bool,
|
deadline_reached: &mut impl FnMut() -> bool,
|
||||||
|
|||||||
@@ -228,6 +228,9 @@ impl VirtualDom {
|
|||||||
unsafe { std::mem::transmute(diff_machine.mutations) }
|
unsafe { std::mem::transmute(diff_machine.mutations) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Compute a manual diff of the VirtualDOM between states.
|
||||||
|
///
|
||||||
|
/// This can be useful when state inside the DOM is remotely changed from the outside, but not propogated as an event.
|
||||||
pub fn diff<'s>(&'s mut self) -> Mutations<'s> {
|
pub fn diff<'s>(&'s mut self) -> Mutations<'s> {
|
||||||
let cur_component = self
|
let cur_component = self
|
||||||
.scheduler
|
.scheduler
|
||||||
@@ -236,7 +239,8 @@ impl VirtualDom {
|
|||||||
.expect("The base scope should never be moved");
|
.expect("The base scope should never be moved");
|
||||||
|
|
||||||
if cur_component.run_scope(&self.scheduler.pool) {
|
if cur_component.run_scope(&self.scheduler.pool) {
|
||||||
let mut diff_machine = DiffMachine::new(Mutations::new(), todo!());
|
let mut diff_machine: DiffMachine<'s> =
|
||||||
|
DiffMachine::new(Mutations::new(), &mut self.scheduler.pool);
|
||||||
diff_machine.diff_scope(self.base_scope);
|
diff_machine.diff_scope(self.base_scope);
|
||||||
diff_machine.mutations
|
diff_machine.mutations
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in new issue
Block a user