diff options
author | Matt Mastracci <matthew@mastracci.com> | 2024-02-23 11:11:15 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-23 11:11:15 -0700 |
commit | 5193834cf23e3521b3afd3f5f54eb00daa23c88d (patch) | |
tree | d67bcef4d96f615f345ad1679d27d73bdc2ccd39 /cli/tools/jupyter | |
parent | 619acce305ac77f98327718bc1e6a1ae13d8bcf6 (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.rs | 26 |
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?; |