summaryrefslogtreecommitdiff
path: root/cli/tools/jupyter
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-23 11:11:15 -0700
committerGitHub <noreply@github.com>2024-02-23 11:11:15 -0700
commit5193834cf23e3521b3afd3f5f54eb00daa23c88d (patch)
treed67bcef4d96f615f345ad1679d27d73bdc2ccd39 /cli/tools/jupyter
parent619acce305ac77f98327718bc1e6a1ae13d8bcf6 (diff)
refactor(cli): clean up test runner channels (#22422)
Gets us closer to solving #20707. Rewrites the `TestEventSender`: - Allow for explicit creation of multiple streams. This will allow for one-std{out,err}-per-worker - All test events are received along with a worker ID, allowing for eventual, proper parallel threading of test events. In theory this should open up proper interleaving of test output, however that is left for a future PR. I had some plans for a better performing synchronization primitive, but the inter-thread communication is tricky. This does, however, speed up the processing of large numbers of tests 15-25% (possibly even more on 100,000+). Before ``` ok | 1000 passed | 0 failed (32ms) ok | 10000 passed | 0 failed (276ms) ``` After ``` ok | 1000 passed | 0 failed (25ms) ok | 10000 passed | 0 failed (230ms) ```
Diffstat (limited to 'cli/tools/jupyter')
-rw-r--r--cli/tools/jupyter/mod.rs26
1 files changed, 13 insertions, 13 deletions
diff --git a/cli/tools/jupyter/mod.rs b/cli/tools/jupyter/mod.rs
index ea58328bb..cf1a44ea5 100644
--- a/cli/tools/jupyter/mod.rs
+++ b/cli/tools/jupyter/mod.rs
@@ -5,6 +5,9 @@ use crate::args::JupyterFlags;
use crate::ops;
use crate::tools::jupyter::server::StdioMsg;
use crate::tools::repl;
+use crate::tools::test::create_single_test_event_channel;
+use crate::tools::test::reporters::PrettyTestReporter;
+use crate::tools::test::TestEventWorkerSender;
use crate::util::logger;
use crate::CliFactory;
use deno_core::anyhow::Context;
@@ -19,13 +22,8 @@ use deno_runtime::permissions::Permissions;
use deno_runtime::permissions::PermissionsContainer;
use deno_terminal::colors;
use tokio::sync::mpsc;
-use tokio::sync::mpsc::unbounded_channel;
use tokio::sync::mpsc::UnboundedSender;
-use super::test::reporters::PrettyTestReporter;
-use super::test::TestEvent;
-use super::test::TestEventSender;
-
mod install;
pub(crate) mod jupyter_msg;
pub(crate) mod server;
@@ -79,11 +77,13 @@ pub async fn kernel(
connection_filepath
)
})?;
- let (test_event_sender, test_event_receiver) =
- unbounded_channel::<TestEvent>();
- let test_event_sender = TestEventSender::new(test_event_sender);
- let stdout = StdioPipe::File(test_event_sender.stdout());
- let stderr = StdioPipe::File(test_event_sender.stderr());
+ let (worker, test_event_receiver) = create_single_test_event_channel();
+ let TestEventWorkerSender {
+ sender: test_event_sender,
+ stdout,
+ stderr,
+ } = worker;
+
let mut worker = worker_factory
.create_custom_worker(
main_module.clone(),
@@ -94,9 +94,9 @@ pub async fn kernel(
],
// FIXME(nayeemrmn): Test output capturing currently doesn't work.
Stdio {
- stdin: StdioPipe::Inherit,
- stdout,
- stderr,
+ stdin: StdioPipe::inherit(),
+ stdout: StdioPipe::file(stdout),
+ stderr: StdioPipe::file(stderr),
},
)
.await?;