66804d26f3
Classic workers were implemented in denoland#11338, which also enabled the WPT tests in the `workers` directory. However, the rest of WPT worker tests were not enabled because a number of them were hanging due to web-platform-tests/wpt#29777. Now that that WPT issue is fixed, the bulk of worker tests can be enabled. There are still a few tests that hang, and so haven't been enabled. In particular: - The following tests seem to hang because a promise fails to resolve. We can detect such cases in non-worker tests because the process will exit without calling the WPT completion callback, but in worker tests the worker message ops will keep the event loop running. This will be fixed when we add timeouts to WPT tests (denoland#9460). - `/fetch/api/basic/error-after-response.any.worker.html` - `/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.worker.html` - `/webmessaging/message-channels/worker-post-after-close.any.worker.html` - `/webmessaging/message-channels/worker.any.worker.html` - `/websockets/Create-on-worker-shutdown.any.worker.html` - The following tests apparently hang because a promise rejection is never handled, which will kill the process in the main thread but not in workers (denoland#12221). - `/streams/readable-streams/async-iterator.any.worker.html` - `/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-cross-origin.sub.any.worker.html` - `/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-redirect-to-cross-origin.sub.any.worker.html` - `/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-same-origin.sub.any.worker.html` |
||
---|---|---|
.. | ||
bench | ||
release | ||
wpt | ||
build_benchmark_jsons.js | ||
cut_a_release.md | ||
flamebench.js | ||
format.js | ||
lint.js | ||
README.md | ||
upload_wptfyi.js | ||
util.js | ||
wpt.ts |
Tools
Documentation for various tooling in support of Deno development.
format.js
This script will format the code (currently using dprint, rustfmt). It is a prerequisite to run this before code check in.
To run formatting:
deno run --allow-read --allow-write --allow-run --unstable ./tools/format.js
lint.js
This script will lint the code base (currently using dlint, clippy). It is a prerequisite to run this before code check in.
To run linting:
deno run --allow-read --allow-write --allow-run --unstable ./tools/lint.js
Tip: You can also use cargo to run the current or pending build of the deno executable
cargo run -- run --allow-read --allow-write --allow-run --unstable ./tools/<script>
flamebench.js
flamebench.js
facilitates profiling and generating flamegraphs from
benchmarks.
General usage:
❯ ./tools/flamebench.js
flamebench <bench_name> [bench_filter]
Available benches:
op_baseline
ser
de
To profile the op_baseline
bench, run ./tools/flamebench.js op_baseline
,
this will run all 3 benches in `op_baseline.
Often when profiling/optimizing, you'll want to focus on a specific sub-bench,
flamebench
supports a bench/test filter arg like the regular cargo commands.
So you can simply run ./tools/flamebench.js op_baseline bench_op_async
or
./tools/flamebench.js op_baseline bench_op_nop
to profile specific benches.
Tip: the [bench_filter]
argument doesn't have to be an exact bench name, you
can use a shorthand or a partial match to profile a group of benches, e.g:
./tools/flamebench.js de v8