From e5beb800c94099852964d482a32a13f5c29ec147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 26 May 2021 21:07:12 +0200 Subject: refactor: move JsRuntimeInspector to deno_core (#10763) This commit moves implementation of "JsRuntimeInspector" to "deno_core" crate. To achieve that following changes were made: * "Worker" and "WebWorker" no longer own instance of "JsRuntimeInspector", instead it is now owned by "deno_core::JsRuntime". * Consequently polling of inspector is no longer done in "Worker"/"WebWorker", instead it's done in "deno_core::JsRuntime::poll_event_loop". * "deno_core::JsRuntime::poll_event_loop" and "deno_core::JsRuntime::run_event_loop", now accept "wait_for_inspector" boolean that tells if event loop should still be "pending" if there are active inspector sessions - this change fixes the problem that inspector disconnects from the frontend and process exits once the code has stopped executing. --- cli/main.rs | 12 +++++++----- cli/program_state.rs | 2 +- cli/standalone.rs | 2 +- cli/tools/coverage.rs | 2 +- cli/tools/repl.rs | 4 ++-- cli/tools/test_runner.rs | 4 +++- 6 files changed, 15 insertions(+), 11 deletions(-) (limited to 'cli') diff --git a/cli/main.rs b/cli/main.rs index 185de5bfe..c44c002b2 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -534,7 +534,7 @@ async fn eval_command( debug!("main_module {}", &main_module); worker.execute_module(&main_module).await?; worker.execute("window.dispatchEvent(new Event('load'))")?; - worker.run_event_loop().await?; + worker.run_event_loop(false).await?; worker.execute("window.dispatchEvent(new Event('unload'))")?; Ok(()) } @@ -737,7 +737,7 @@ async fn run_repl(flags: Flags) -> Result<(), AnyError> { let program_state = ProgramState::build(flags).await?; let mut worker = create_main_worker(&program_state, main_module.clone(), permissions, false); - worker.run_event_loop().await?; + worker.run_event_loop(false).await?; tools::repl::run(&program_state, worker).await } @@ -770,7 +770,7 @@ async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> { debug!("main_module {}", main_module); worker.execute_module(&main_module).await?; worker.execute("window.dispatchEvent(new Event('load'))")?; - worker.run_event_loop().await?; + worker.run_event_loop(false).await?; worker.execute("window.dispatchEvent(new Event('unload'))")?; Ok(()) } @@ -839,7 +839,7 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<(), AnyError> { debug!("main_module {}", main_module); worker.execute_module(&main_module).await?; worker.execute("window.dispatchEvent(new Event('load'))")?; - worker.run_event_loop().await?; + worker.run_event_loop(false).await?; worker.execute("window.dispatchEvent(new Event('unload'))")?; Ok(()) } @@ -881,7 +881,9 @@ async fn run_command(flags: Flags, script: String) -> Result<(), AnyError> { debug!("main_module {}", main_module); worker.execute_module(&main_module).await?; worker.execute("window.dispatchEvent(new Event('load'))")?; - worker.run_event_loop().await?; + worker + .run_event_loop(maybe_coverage_collector.is_none()) + .await?; worker.execute("window.dispatchEvent(new Event('unload'))")?; if let Some(coverage_collector) = maybe_coverage_collector.as_mut() { diff --git a/cli/program_state.rs b/cli/program_state.rs index 9f7ddc749..c3c399b69 100644 --- a/cli/program_state.rs +++ b/cli/program_state.rs @@ -17,7 +17,7 @@ use crate::specifier_handler::FetchHandler; use crate::version; use deno_runtime::deno_broadcast_channel::InMemoryBroadcastChannel; use deno_runtime::deno_file::BlobUrlStore; -use deno_runtime::inspector::InspectorServer; +use deno_runtime::inspector_server::InspectorServer; use deno_runtime::permissions::Permissions; use deno_core::error::anyhow; diff --git a/cli/standalone.rs b/cli/standalone.rs index f281c5336..f79adb510 100644 --- a/cli/standalone.rs +++ b/cli/standalone.rs @@ -202,7 +202,7 @@ pub async fn run( worker.bootstrap(&options); worker.execute_module(&main_module).await?; worker.execute("window.dispatchEvent(new Event('load'))")?; - worker.run_event_loop().await?; + worker.run_event_loop(true).await?; worker.execute("window.dispatchEvent(new Event('unload'))")?; std::process::exit(0); } diff --git a/cli/tools/coverage.rs b/cli/tools/coverage.rs index 204141b25..9a64cd5f3 100644 --- a/cli/tools/coverage.rs +++ b/cli/tools/coverage.rs @@ -13,7 +13,7 @@ use deno_core::error::AnyError; use deno_core::serde_json; use deno_core::serde_json::json; use deno_core::url::Url; -use deno_runtime::inspector::LocalInspectorSession; +use deno_core::LocalInspectorSession; use deno_runtime::permissions::Permissions; use regex::Regex; use serde::Deserialize; diff --git a/cli/tools/repl.rs b/cli/tools/repl.rs index ba69c9234..47f46c361 100644 --- a/cli/tools/repl.rs +++ b/cli/tools/repl.rs @@ -9,7 +9,7 @@ use deno_core::error::AnyError; use deno_core::futures::FutureExt; use deno_core::serde_json::json; use deno_core::serde_json::Value; -use deno_runtime::inspector::LocalInspectorSession; +use deno_core::LocalInspectorSession; use deno_runtime::worker::MainWorker; use rustyline::completion::Completer; use rustyline::error::ReadlineError; @@ -287,7 +287,7 @@ async fn read_line_and_poll( result = &mut line => { return result.unwrap(); } - _ = worker.run_event_loop(), if poll_worker => { + _ = worker.run_event_loop(false), if poll_worker => { poll_worker = false; } _ = timeout => { diff --git a/cli/tools/test_runner.rs b/cli/tools/test_runner.rs index 7d1eae9ee..24bea3ff8 100644 --- a/cli/tools/test_runner.rs +++ b/cli/tools/test_runner.rs @@ -307,7 +307,9 @@ pub async fn run_test_file( let execute_result = worker.execute_module(&test_module).await; execute_result?; - worker.run_event_loop().await?; + worker + .run_event_loop(maybe_coverage_collector.is_none()) + .await?; worker.execute("window.dispatchEvent(new Event('unload'))")?; if let Some(coverage_collector) = maybe_coverage_collector.as_mut() { -- cgit v1.2.3