summaryrefslogtreecommitdiff
path: root/cli/tools/repl/session.rs
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/repl/session.rs
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/repl/session.rs')
-rw-r--r--cli/tools/repl/session.rs5
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;