diff options
author | Andreu Botella <andreu@andreubotella.com> | 2022-12-13 23:28:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-13 23:28:38 +0100 |
commit | 929847c7223db5c1ea2e7eec6d47b09e34a5797d (patch) | |
tree | 38f69f85d38122cfc819d9440c9bbc2944a91afb | |
parent | 3551955b6355a8ef677962b6c15adfac349ac01d (diff) |
chore(core): Deduplicate `event_loop_pending_state` (#17039)
-rw-r--r-- | core/runtime.rs | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/core/runtime.rs b/core/runtime.rs index 7ce9d3d09..5e76879e5 100644 --- a/core/runtime.rs +++ b/core/runtime.rs @@ -1242,40 +1242,21 @@ impl JsRuntime { } fn event_loop_pending_state(&mut self) -> EventLoopPendingState { - let isolate = self.v8_isolate.as_mut().unwrap(); - let state = self.state.borrow_mut(); - let module_map = self.module_map.as_mut().unwrap().borrow(); - - EventLoopPendingState { - has_pending_refed_ops: state.pending_ops.len() > state.unrefed_ops.len(), - has_pending_dyn_imports: module_map.has_pending_dynamic_imports(), - has_pending_dyn_module_evaluation: !state - .pending_dyn_mod_evaluate - .is_empty(), - has_pending_module_evaluation: state.pending_mod_evaluate.is_some(), - has_pending_background_tasks: isolate.has_pending_background_tasks(), - has_tick_scheduled: state.has_tick_scheduled, - } + EventLoopPendingState::new( + self.v8_isolate.as_mut().unwrap(), + &mut self.state.borrow_mut(), + &self.module_map.as_ref().unwrap().borrow(), + ) } pub(crate) fn event_loop_pending_state_from_isolate( isolate: &mut v8::Isolate, ) -> EventLoopPendingState { - let state_rc = Self::state(isolate); - let module_map_rc = Self::module_map(isolate); - let state = state_rc.borrow_mut(); - let module_map = module_map_rc.borrow(); - - EventLoopPendingState { - has_pending_refed_ops: state.pending_ops.len() > state.unrefed_ops.len(), - has_pending_dyn_imports: module_map.has_pending_dynamic_imports(), - has_pending_dyn_module_evaluation: !state - .pending_dyn_mod_evaluate - .is_empty(), - has_pending_module_evaluation: state.pending_mod_evaluate.is_some(), - has_pending_background_tasks: isolate.has_pending_background_tasks(), - has_tick_scheduled: state.has_tick_scheduled, - } + EventLoopPendingState::new( + isolate, + &mut Self::state(isolate).borrow_mut(), + &Self::module_map(isolate).borrow(), + ) } } @@ -1342,6 +1323,23 @@ pub(crate) struct EventLoopPendingState { has_tick_scheduled: bool, } impl EventLoopPendingState { + pub fn new( + isolate: &mut v8::Isolate, + state: &mut JsRuntimeState, + module_map: &ModuleMap, + ) -> EventLoopPendingState { + EventLoopPendingState { + has_pending_refed_ops: state.pending_ops.len() > state.unrefed_ops.len(), + has_pending_dyn_imports: module_map.has_pending_dynamic_imports(), + has_pending_dyn_module_evaluation: !state + .pending_dyn_mod_evaluate + .is_empty(), + has_pending_module_evaluation: state.pending_mod_evaluate.is_some(), + has_pending_background_tasks: isolate.has_pending_background_tasks(), + has_tick_scheduled: state.has_tick_scheduled, + } + } + pub fn is_pending(&self) -> bool { self.has_pending_refed_ops || self.has_pending_dyn_imports |