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/tests | |
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/tests')
-rw-r--r-- | cli/tests/workers/large_message_worker.js | 14 | ||||
-rw-r--r-- | cli/tests/workers_large_message_bench.ts | 35 |
2 files changed, 49 insertions, 0 deletions
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(); |