1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

refactor: use new poll methods from JsRuntime (#21302)

This commit is contained in:
Bartek Iwańczuk 2023-11-27 00:09:04 +01:00 committed by GitHub
parent a4ec7dfae0
commit 550a24ad0e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 8 deletions

View file

@ -33,6 +33,7 @@ use deno_core::ModuleId;
use deno_core::ModuleLoader; use deno_core::ModuleLoader;
use deno_core::ModuleSpecifier; use deno_core::ModuleSpecifier;
use deno_core::OpMetricsSummaryTracker; use deno_core::OpMetricsSummaryTracker;
use deno_core::PollEventLoopOptions;
use deno_core::RuntimeOptions; use deno_core::RuntimeOptions;
use deno_core::SharedArrayBufferStore; use deno_core::SharedArrayBufferStore;
use deno_core::Snapshot; use deno_core::Snapshot;
@ -711,6 +712,11 @@ impl WebWorker {
id: ModuleId, id: ModuleId,
) -> Result<(), AnyError> { ) -> Result<(), AnyError> {
let mut receiver = self.js_runtime.mod_evaluate(id); let mut receiver = self.js_runtime.mod_evaluate(id);
let poll_options = PollEventLoopOptions {
wait_for_inspector: false,
..Default::default()
};
tokio::select! { tokio::select! {
biased; biased;
@ -722,7 +728,7 @@ impl WebWorker {
maybe_result.unwrap_or(Ok(())) maybe_result.unwrap_or(Ok(()))
} }
event_loop_result = self.run_event_loop(false) => { event_loop_result = self.run_event_loop(poll_options) => {
if self.internal_handle.is_terminated() { if self.internal_handle.is_terminated() {
return Ok(()); return Ok(());
} }
@ -736,7 +742,7 @@ impl WebWorker {
fn poll_event_loop( fn poll_event_loop(
&mut self, &mut self,
cx: &mut Context, cx: &mut Context,
wait_for_inspector: bool, poll_options: PollEventLoopOptions,
) -> Poll<Result<(), AnyError>> { ) -> Poll<Result<(), AnyError>> {
// If awakened because we are terminating, just return Ok // If awakened because we are terminating, just return Ok
if self.internal_handle.terminate_if_needed() { if self.internal_handle.terminate_if_needed() {
@ -745,7 +751,7 @@ impl WebWorker {
self.internal_handle.terminate_waker.register(cx.waker()); self.internal_handle.terminate_waker.register(cx.waker());
match self.js_runtime.poll_event_loop(cx, wait_for_inspector) { match self.js_runtime.poll_event_loop2(cx, poll_options) {
Poll::Ready(r) => { Poll::Ready(r) => {
// If js ended because we are terminating, just return Ok // If js ended because we are terminating, just return Ok
if self.internal_handle.terminate_if_needed() { if self.internal_handle.terminate_if_needed() {
@ -773,9 +779,9 @@ impl WebWorker {
pub async fn run_event_loop( pub async fn run_event_loop(
&mut self, &mut self,
wait_for_inspector: bool, poll_options: PollEventLoopOptions,
) -> Result<(), AnyError> { ) -> Result<(), AnyError> {
poll_fn(|cx| self.poll_event_loop(cx, wait_for_inspector)).await poll_fn(|cx| self.poll_event_loop(cx, poll_options)).await
} }
// Starts polling for messages from worker host from JavaScript. // Starts polling for messages from worker host from JavaScript.
@ -851,7 +857,12 @@ pub fn run_web_worker(
} }
let result = if result.is_ok() { let result = if result.is_ok() {
worker.run_event_loop(true).await worker
.run_event_loop(PollEventLoopOptions {
wait_for_inspector: true,
..Default::default()
})
.await
} else { } else {
result result
}; };

View file

@ -603,14 +603,26 @@ impl MainWorker {
cx: &mut Context, cx: &mut Context,
wait_for_inspector: bool, wait_for_inspector: bool,
) -> Poll<Result<(), AnyError>> { ) -> Poll<Result<(), AnyError>> {
self.js_runtime.poll_event_loop(cx, wait_for_inspector) self.js_runtime.poll_event_loop2(
cx,
deno_core::PollEventLoopOptions {
wait_for_inspector,
..Default::default()
},
)
} }
pub async fn run_event_loop( pub async fn run_event_loop(
&mut self, &mut self,
wait_for_inspector: bool, wait_for_inspector: bool,
) -> Result<(), AnyError> { ) -> Result<(), AnyError> {
self.js_runtime.run_event_loop(wait_for_inspector).await self
.js_runtime
.run_event_loop2(deno_core::PollEventLoopOptions {
wait_for_inspector,
..Default::default()
})
.await
} }
/// Return exit code set by the executed code (either in main worker /// Return exit code set by the executed code (either in main worker