diff options
author | Inteon <42113979+inteon@users.noreply.github.com> | 2021-02-23 13:08:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-23 13:08:50 +0100 |
commit | dccf5e0c5c7f04409809104dd23472bcc058e170 (patch) | |
tree | 23bad9b434c45fd08315abef66f1fe16add14a44 /cli | |
parent | 2e24af23002b6d77543861bf9b2a6027e0357a93 (diff) |
refactor(core): Allow multiple overflown responses in single poll (#9433)
This commit rewrites "JsRuntime::poll" function to fix a corner case that
might caused "overflown_response" to be overwritten by other overflown response.
The logic has been changed to allow returning multiple overflown response
alongside responses from shared queue.
Diffstat (limited to 'cli')
-rw-r--r-- | cli/bench/main.rs | 9 | ||||
-rw-r--r-- | cli/tests/workers/large_message_worker.js | 14 | ||||
-rw-r--r-- | cli/tests/workers_large_message_bench.ts | 35 |
3 files changed, 58 insertions, 0 deletions
diff --git a/cli/bench/main.rs b/cli/bench/main.rs index b69bbc7ac..c6f786e31 100644 --- a/cli/bench/main.rs +++ b/cli/bench/main.rs @@ -68,6 +68,15 @@ const EXEC_TIME_BENCHMARKS: &[(&str, &[&str], Option<i32>)] = &[ None, ), ( + "workers_large_message", + &[ + "run", + "--allow-read", + "cli/tests/workers_large_message_bench.ts", + ], + None, + ), + ( "text_decoder", &["run", "cli/tests/text_decoder_perf.js"], None, diff --git a/cli/tests/workers/large_message_worker.js b/cli/tests/workers/large_message_worker.js new file mode 100644 index 000000000..f7b7da8a0 --- /dev/null +++ b/cli/tests/workers/large_message_worker.js @@ -0,0 +1,14 @@ +// Copyright 2020 the Deno authors. All rights reserved. MIT license. + +const dataSmall = ""; +const dataLarge = "x".repeat(10 * 1024); + +onmessage = function (e) { + for (let i = 0; i <= 10; i++) { + if (i % 2 == 0) { + postMessage(dataLarge); + } else { + postMessage(dataSmall); + } + } +}; diff --git a/cli/tests/workers_large_message_bench.ts b/cli/tests/workers_large_message_bench.ts new file mode 100644 index 000000000..9cda5a40d --- /dev/null +++ b/cli/tests/workers_large_message_bench.ts @@ -0,0 +1,35 @@ +// Copyright 2020 the Deno authors. All rights reserved. MIT license. + +// deno-lint-ignore-file + +import { deferred } from "../../test_util/std/async/deferred.ts"; + +function oneWorker(i: any): Promise<void> { + return new Promise<void>((resolve) => { + let countDown = 10; + const worker = new Worker( + new URL("workers/large_message_worker.js", import.meta.url).href, + { type: "module" }, + ); + worker.onmessage = (e): void => { + if (countDown > 0) { + countDown--; + return; + } + worker.terminate(); + resolve(); + }; + worker.postMessage("hi " + i); + }); +} + +function bench(): Promise<any> { + let promises = []; + for (let i = 0; i < 50; i++) { + promises.push(oneWorker(i)); + } + + return Promise.all(promises); +} + +bench(); |