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/repl/session.rs | |
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/repl/session.rs')
-rw-r--r-- | cli/tools/repl/session.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs index a52eb095f..65e27136f 100644 --- a/cli/tools/repl/session.rs +++ b/cli/tools/repl/session.rs @@ -14,6 +14,7 @@ use crate::tools::test::reporters::TestReporter; use crate::tools::test::run_tests_for_worker; use crate::tools::test::worker_has_tests; use crate::tools::test::TestEvent; +use crate::tools::test::TestEventReceiver; use crate::tools::test::TestEventSender; use deno_ast::diagnostics::Diagnostic; @@ -183,7 +184,7 @@ pub struct ReplSession { test_reporter_factory: Box<dyn Fn() -> Box<dyn TestReporter>>, test_event_sender: TestEventSender, /// This is only optional because it's temporarily taken when evaluating. - test_event_receiver: Option<tokio::sync::mpsc::UnboundedReceiver<TestEvent>>, + test_event_receiver: Option<TestEventReceiver>, jsx: ReplJsxState, experimental_decorators: bool, } @@ -196,7 +197,7 @@ impl ReplSession { mut worker: MainWorker, main_module: ModuleSpecifier, test_event_sender: TestEventSender, - test_event_receiver: tokio::sync::mpsc::UnboundedReceiver<TestEvent>, + test_event_receiver: TestEventReceiver, ) -> Result<Self, AnyError> { let language_server = ReplLanguageServer::new_initialized().await?; let mut session = worker.create_inspector_session().await; |