From 0747d2c419408a14d0bd68ae0fe67bf86a3426dd Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Mon, 27 Apr 2020 23:18:42 +0100 Subject: [PATCH] Rework fallback for postMessage issue Now initialise all workers with module+memory separately, and then instead of using postMessage to send thread pointers, push them into a crossbeam-deque on the Rust side. Rayon already depends on crossbeam-dequeue, so we're not even adding another dependency, and this model allows us to push "tasks" (thread pointers) on the main thread and pop them on worker threads in arbitrary order without sacrificing correctness. --- codecs/oxipng/Cargo.lock | 257 ++++++++++-------- codecs/oxipng/Cargo.toml | 7 +- codecs/oxipng/build.sh | 1 + codecs/oxipng/main.js | 27 -- codecs/oxipng/pkg/squoosh_oxipng.d.ts | 14 +- codecs/oxipng/pkg/squoosh_oxipng.js | 95 +++---- codecs/oxipng/pkg/squoosh_oxipng_bg.wasm | Bin 110122 -> 113942 bytes ...ng_bg.d.ts => squoosh_oxipng_bg.wasm.d.ts} | 3 +- codecs/oxipng/spawn.js | 49 ++-- codecs/oxipng/src/lib.rs | 44 +-- codecs/oxipng/worker.js | 7 +- src/codecs/oxipng/encoder.ts | 4 +- 12 files changed, 253 insertions(+), 255 deletions(-) delete mode 100644 codecs/oxipng/main.js rename codecs/oxipng/pkg/{squoosh_oxipng_bg.d.ts => squoosh_oxipng_bg.wasm.d.ts} (83%) diff --git a/codecs/oxipng/Cargo.lock b/codecs/oxipng/Cargo.lock index 1fffe484..3192af13 100644 --- a/codecs/oxipng/Cargo.lock +++ b/codecs/oxipng/Cargo.lock @@ -1,10 +1,16 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. [[package]] -name = "adler32" -version = "1.1.0" +name = "adler" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + +[[package]] +name = "adler32" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" [[package]] name = "autocfg" @@ -32,9 +38,9 @@ checksum = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" [[package]] name = "bumpalo" -version = "3.4.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" [[package]] name = "bytemuck" @@ -50,9 +56,9 @@ checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "cc" -version = "1.0.58" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" +checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" [[package]] name = "cfg-if" @@ -78,16 +84,6 @@ dependencies = [ "cc", ] -[[package]] -name = "console_log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" -dependencies = [ - "log", - "web-sys", -] - [[package]] name = "crc" version = "1.8.1" @@ -106,6 +102,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" +dependencies = [ + "crossbeam-utils", + "maybe-uninit", +] + [[package]] name = "crossbeam-deque" version = "0.7.3" @@ -132,17 +138,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "maybe-uninit", -] - [[package]] name = "crossbeam-utils" version = "0.7.2" @@ -156,9 +151,9 @@ dependencies = [ [[package]] name = "deflate" -version = "0.8.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +checksum = "050ef6de42a33903b30a7497b76b40d3d58691d4d3eec355348c122444a388f0" dependencies = [ "adler32", "byteorder", @@ -171,19 +166,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] -name = "hermit-abi" -version = "0.1.15" +name = "hashbrown" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9" +checksum = "00d63df3d41950fb462ed38308eea019113ad1508da725bbedcd0fa5a85ef5f7" + +[[package]] +name = "hermit-abi" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" dependencies = [ "libc", ] [[package]] name = "image" -version = "0.23.7" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2397fc43bd5648b7117aabb3c5e62d0e62c194826ec77b0b4d0c41e62744635" +checksum = "9062b90712d25bc6bb165d110aa59c6b47c849246e341e7b86a98daff9d49f60" dependencies = [ "bytemuck", "byteorder", @@ -195,14 +196,24 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c398b2b113b55809ceb9ee3e753fcbac793f1956663f3c36549c1346015c2afe" +checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" dependencies = [ "autocfg", + "hashbrown", "rayon", ] +[[package]] +name = "inflate" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +dependencies = [ + "adler32", +] + [[package]] name = "itertools" version = "0.9.0" @@ -212,15 +223,6 @@ dependencies = [ "either", ] -[[package]] -name = "js-sys" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b9172132a62451e56142bff9afc91c8e4a4500aa5b847da36815b63bfda916" -dependencies = [ - "wasm-bindgen", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -229,24 +231,33 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.72" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f8082297d534141b30c8d39e9b1773713ab50fdbe4ff30f750d063b3bfd701" +checksum = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" [[package]] -name = "libdeflater" -version = "0.2.0" +name = "libdeflate-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66dca08b13369865b2f6dca1dd05f833985cbe6c12a676b04d55f78b85e80246" +checksum = "21e39efa87b84db3e13ff4e2dfac1e57220abcbd7fe8ec44d238f7f4f787cc1f" dependencies = [ "cc", ] [[package]] -name = "log" -version = "0.4.8" +name = "libdeflater" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +checksum = "a4810980d791f26d470e2d7d91a3d4d22aa3a4b709fb7e9c5e43ee54f83a01f2" +dependencies = [ + "libdeflate-sys", +] + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" dependencies = [ "cfg-if", ] @@ -259,27 +270,28 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memoffset" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" +checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" dependencies = [ "autocfg", ] [[package]] name = "miniz_oxide" -version = "0.3.7" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +checksum = "c60c0dfe32c10b43a144bad8fc83538c52f58302c92300ea7ec7bf7b38d5a7b9" dependencies = [ - "adler32", + "adler", + "autocfg", ] [[package]] name = "num-integer" -version = "0.1.43" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" +checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ "autocfg", "num-traits", @@ -287,9 +299,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.41" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" +checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" dependencies = [ "autocfg", "num-integer", @@ -298,9 +310,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.3.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ "autocfg", "num-integer", @@ -309,28 +321,34 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.12" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" +checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" dependencies = [ "hermit-abi", "libc", ] [[package]] -name = "oxipng" -version = "3.0.0" +name = "once_cell" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fd695858078338d73862ff3755f820eff0bf4f3304e4b52f22aba53463183a" +checksum = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" + +[[package]] +name = "oxipng" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5687a277f33b5fe5ee2ff5ceab4417885a428a1a938e944aa7df9d7e58c35762" dependencies = [ "bit-vec", "byteorder", @@ -344,44 +362,45 @@ dependencies = [ "miniz_oxide", "rayon", "rgb", + "rustc_version", "zopfli", ] [[package]] name = "png" -version = "0.16.6" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c150bf7479fafe3dd8740dbe48cc33b2a3efb7b0fe3483aced8bbc39f6d0238d" +checksum = "46060468187c21c00ffa2a920690b29997d7fd543f5a4d400461e4a7d4fccde8" dependencies = [ "bitflags", "crc32fast", "deflate", - "miniz_oxide", + "inflate", ] [[package]] name = "proc-macro2" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa" +checksum = "36e28516df94f3dd551a587da5357459d9b36d945a7c37c3557928c1c2ff2a2c" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.7" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" dependencies = [ "proc-macro2", ] [[package]] name = "rayon" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" +checksum = "cfd016f0c045ad38b5251be2c9c0ab806917f82da4d36b2a327e5166adad9270" dependencies = [ "autocfg", "crossbeam-deque", @@ -391,12 +410,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" +checksum = "e8c4fec834fb6e6d2dd5eece3c7b432a52f0ba887cf40e595190c4107edc08bf" dependencies = [ + "crossbeam-channel", "crossbeam-deque", - "crossbeam-queue", "crossbeam-utils", "lazy_static", "num_cpus", @@ -404,26 +423,50 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.20" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ef54b45ae131327a88597e2463fee4098ad6c88ba7b6af4b3987db8aad4098" +checksum = "287f3c3f8236abb92d8b7e36797f19159df4b58f0a658cc3fb6dd3004b1f3bd3" dependencies = [ "bytemuck", ] +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "squoosh-oxipng" version = "0.1.0" dependencies = [ - "console_log", - "js-sys", + "crossbeam-deque", "log", + "once_cell", "oxipng", "rayon", "wasm-bindgen", @@ -431,9 +474,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.34" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cae2873c940d92e697597c5eee105fb570cd5689c695806f672883653349b" +checksum = "6690e3e9f692504b941dc6c3b188fd28df054f7fb8469ab40680df52fdcc842b" dependencies = [ "proc-macro2", "quote", @@ -448,15 +491,15 @@ checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "wasm-bindgen" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a634620115e4a229108b71bde263bb4220c483b3f07f5ba514ee8d15064c4c2" +checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -464,9 +507,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e53963b583d18a5aa3aaae4b4c1cb535218246131ba22a71f05b518098571df" +checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" dependencies = [ "bumpalo", "lazy_static", @@ -479,9 +522,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcfd5ef6eec85623b4c6e844293d4516470d8f19cd72d0d12246017eb9060b8" +checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -489,9 +532,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9adff9ee0e94b926ca81b57f57f86d5545cdcb1d259e21ec9bdd95b901754c75" +checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" dependencies = [ "proc-macro2", "quote", @@ -502,19 +545,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7b90ea6c632dd06fd765d44542e234d5e63d9bb917ecd64d79778a13bd79ae" - -[[package]] -name = "web-sys" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863539788676619aac1a23e2df3655e96b32b0e05eb72ca34ba045ad573c625d" -dependencies = [ - "js-sys", - "wasm-bindgen", -] +checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" [[package]] name = "zopfli" diff --git a/codecs/oxipng/Cargo.toml b/codecs/oxipng/Cargo.toml index bc9e1947..a5c1273e 100644 --- a/codecs/oxipng/Cargo.toml +++ b/codecs/oxipng/Cargo.toml @@ -13,9 +13,12 @@ oxipng = { version = "3.0.0", default-features = false, features = ["parallel"] wasm-bindgen = "0.2.64" log = { version = "0.4", features = ["release_max_level_off"] } rayon = "1.3.0" -js-sys = "0.3.37" -console_log = "0.2.0" +crossbeam-deque = "0.7.3" +once_cell = "1.3.1" [profile.release] lto = true opt-level = "s" + +[package.metadata.wasm-pack.profile.release] +wasm-opt = ["-O", "--no-validation"] diff --git a/codecs/oxipng/build.sh b/codecs/oxipng/build.sh index 20a5994b..ebe32368 100644 --- a/codecs/oxipng/build.sh +++ b/codecs/oxipng/build.sh @@ -6,6 +6,7 @@ echo "=============================================" echo "Compiling wasm" echo "=============================================" ( + rm -rf pkg CC=/opt/wasi-sdk/bin/clang RUSTFLAGS='-C target-feature=+atomics,+bulk-memory' rustup run nightly wasm-pack build -t web -- -Z build-std=panic_abort,std rm pkg/.gitignore ) diff --git a/codecs/oxipng/main.js b/codecs/oxipng/main.js deleted file mode 100644 index 629127bb..00000000 --- a/codecs/oxipng/main.js +++ /dev/null @@ -1,27 +0,0 @@ -import initOxiPNG, { start_main_thread, optimise } from './pkg/squoosh_oxipng.js'; -import wasmUrl from "./pkg/squoosh_oxipng_bg.wasm"; - -async function startMainThread() { - await initOxiPNG(fetch(wasmUrl)); - start_main_thread({ - length: navigator.hardwareConcurrency, - pop: () => ({ - postMessage: data => { - postMessage({ type: 'spawn', data }); - } - }) - }); - return { - optimise - }; -} - -const mainThread = startMainThread(); -addEventListener('message', async ({ data: { id, args } }) => { - try { - let result = (await mainThread).optimise(...args); - postMessage({ ok: true, id, result }); - } catch (result) { - postMessage({ ok: false, id, result }); - } -}); diff --git a/codecs/oxipng/pkg/squoosh_oxipng.d.ts b/codecs/oxipng/pkg/squoosh_oxipng.d.ts index 49f6a286..58683e41 100644 --- a/codecs/oxipng/pkg/squoosh_oxipng.d.ts +++ b/codecs/oxipng/pkg/squoosh_oxipng.d.ts @@ -1,13 +1,16 @@ /* tslint:disable */ /* eslint-disable */ /** -* @param {Array} workers +* @returns {any} */ -export function start_main_thread(workers: Array): void; +export function worker_initializer(): any; /** -* @param {number} thread +* @param {number} num */ -export function start_worker_thread(thread: number): void; +export function start_main_thread(num: number): void; +/** +*/ +export function start_worker_thread(): void; /** * @param {Uint8Array} data * @param {number} level @@ -18,8 +21,9 @@ export function optimise(data: Uint8Array, level: number): Uint8Array; export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; export interface InitOutput { + readonly worker_initializer: () => number; readonly start_main_thread: (a: number) => void; - readonly start_worker_thread: (a: number) => void; + readonly start_worker_thread: () => void; readonly optimise: (a: number, b: number, c: number, d: number) => void; readonly malloc: (a: number) => number; readonly free: (a: number) => void; diff --git a/codecs/oxipng/pkg/squoosh_oxipng.js b/codecs/oxipng/pkg/squoosh_oxipng.js index adf082cf..53d14fc9 100644 --- a/codecs/oxipng/pkg/squoosh_oxipng.js +++ b/codecs/oxipng/pkg/squoosh_oxipng.js @@ -6,22 +6,8 @@ const heap = new Array(32).fill(undefined); heap.push(undefined, null, true, false); -function getObject(idx) { return heap[idx]; } - let heap_next = heap.length; -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - function addHeapObject(obj) { if (heap_next === heap.length) heap.push(heap.length + 1); const idx = heap_next; @@ -46,18 +32,39 @@ function getUint8Memory0() { function getStringFromWasm0(ptr, len) { return cachedTextDecoder.decode(getUint8Memory0().slice(ptr, ptr + len)); } + +function getObject(idx) { return heap[idx]; } + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} /** -* @param {Array} workers +* @returns {any} */ -export function start_main_thread(workers) { - wasm.start_main_thread(addHeapObject(workers)); +export function worker_initializer() { + var ret = wasm.worker_initializer(); + return takeObject(ret); } /** -* @param {number} thread +* @param {number} num */ -export function start_worker_thread(thread) { - wasm.start_worker_thread(thread); +export function start_main_thread(num) { + wasm.start_main_thread(num); +} + +/** +*/ +export function start_worker_thread() { + wasm.start_worker_thread(); } let WASM_VECTOR_LEN = 0; @@ -86,14 +93,20 @@ function getArrayU8FromWasm0(ptr, len) { * @returns {Uint8Array} */ export function optimise(data, level) { - var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - var len0 = WASM_VECTOR_LEN; - wasm.optimise(8, ptr0, len0, level); - var r0 = getInt32Memory0()[8 / 4 + 0]; - var r1 = getInt32Memory0()[8 / 4 + 1]; - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v1; + try { + const retptr = wasm.__wbindgen_export_1.value - 16; + wasm.__wbindgen_export_1.value = retptr; + var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.optimise(retptr, ptr0, len0, level); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; + } finally { + wasm.__wbindgen_export_1.value += 16; + } } async function load(module, imports, maybe_memory) { @@ -135,40 +148,18 @@ async function init(input, maybe_memory) { } const imports = {}; imports.wbg = {}; - imports.wbg.__wbg_length_8dacd620a01b769a = function(arg0) { - var ret = getObject(arg0).length; - return ret; - }; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbg_pop_e063afe6cb737ed3 = function(arg0) { - var ret = getObject(arg0).pop(); - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_891c121bc64f5c10 = function() { - var ret = new Array(); - return addHeapObject(ret); - }; imports.wbg.__wbindgen_module = function() { var ret = init.__wbindgen_wasm_module; return addHeapObject(ret); }; - imports.wbg.__wbg_push_ffe5167b83871629 = function(arg0, arg1) { - var ret = getObject(arg0).push(getObject(arg1)); - return ret; - }; imports.wbg.__wbindgen_memory = function() { var ret = wasm.__wbindgen_export_0; return addHeapObject(ret); }; - imports.wbg.__wbindgen_number_new = function(arg0) { - var ret = arg0; + imports.wbg.__wbg_of_6510501edc06d65e = function(arg0, arg1) { + var ret = Array.of(takeObject(arg0), takeObject(arg1)); return addHeapObject(ret); }; - imports.wbg.__wbg_postMessage_5ab140e61ca2cb42 = function(arg0, arg1) { - getObject(arg0).postMessage(takeObject(arg1)); - }; imports.wbg.__wbindgen_throw = function(arg0, arg1) { throw new Error(getStringFromWasm0(arg0, arg1)); }; diff --git a/codecs/oxipng/pkg/squoosh_oxipng_bg.wasm b/codecs/oxipng/pkg/squoosh_oxipng_bg.wasm index 47edeaca513b38ef7732bc4bf733e6c3c3c60363..98d53e787345598d96393a94c284de80ce28e91b 100644 GIT binary patch literal 113942 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 new Worker("./worker.js", { type: "module" }) -); - -main.addEventListener('message', ({ data: { type, data } }) => { - if (type === 'spawn') { - workers.pop().postMessage(data); +async function startMainThread() { + let num = navigator.hardwareConcurrency; + await initOxiPNG(fetch(wasmUrl)); + let workerInit = worker_initializer(); + let workers = []; + for (let i = 0; i < num; i++) { + workers.push(new Promise(resolve => { + let worker = new Worker("./worker.js", { type: "module" }); + worker.postMessage(workerInit); + worker.addEventListener('message', resolve, { once: true }); + })); } -}); - -let ID = 0; - -export function optimise(...args) { - return new Promise((resolve, reject) => { - let sendId = ID++; - - main.addEventListener('message', function onMessage({ data: { ok, id, result } }) { - if (id !== sendId) return; - main.removeEventListener('message', onMessage); - if (ok) { - resolve(result); - } else { - reject(result); - } - }); - - main.postMessage({ id: sendId, args }); - }); + await Promise.all(workers); + start_main_thread(num); + return { + optimise + }; } + +export default startMainThread(); diff --git a/codecs/oxipng/src/lib.rs b/codecs/oxipng/src/lib.rs index 9b8401ab..a494604e 100644 --- a/codecs/oxipng/src/lib.rs +++ b/codecs/oxipng/src/lib.rs @@ -1,42 +1,44 @@ mod malloc_shim; -use js_sys::Array; +use crossbeam_deque::Injector; +use once_cell::sync::OnceCell; use wasm_bindgen::prelude::*; -use wasm_bindgen::{JsCast, JsValue}; +use wasm_bindgen::JsValue; use oxipng::AlphaOptim; #[wasm_bindgen] extern "C" { - type Worker; + #[wasm_bindgen(js_namespace = Array, js_name = of)] + fn array_of_2(a: JsValue, b: JsValue) -> JsValue; +} - #[wasm_bindgen(method, js_name = postMessage)] - fn post_message(worker: &Worker, msg: JsValue); +static TASKS: OnceCell> = OnceCell::new(); + +#[wasm_bindgen] +pub fn worker_initializer() -> JsValue { + TASKS.get_or_init(Injector::new); + array_of_2(wasm_bindgen::module(), wasm_bindgen::memory()) } #[wasm_bindgen] -pub fn start_main_thread(workers: Array) { - // console_log::init_with_level(log::Level::Trace); +pub fn start_main_thread(num: usize) { + let tasks = TASKS.get().unwrap(); rayon::ThreadPoolBuilder::new() - .num_threads(workers.length() as _) - .spawn_handler(move |thread| { - Ok(workers.pop().unchecked_into::().post_message({ - let arr = Array::new(); - arr.push(&wasm_bindgen::module()); - arr.push(&wasm_bindgen::memory()); - arr.push(&JsValue::from(Box::into_raw(Box::new(thread)) as u32)); - arr.into() - })) - }) + .num_threads(num) + .spawn_handler(|thread| Ok(tasks.push(thread))) .build_global() .unwrap_throw() } #[wasm_bindgen] -pub fn start_worker_thread(thread: *mut rayon::ThreadBuilder) { - // console_log::init_with_level(log::Level::Trace); - - unsafe { Box::from_raw(thread) }.run() +pub fn start_worker_thread() { + let tasks = TASKS.get().unwrap(); + loop { + if let crossbeam_deque::Steal::Success(task) = tasks.steal() { + return task.run(); + } + } } #[wasm_bindgen(catch)] diff --git a/codecs/oxipng/worker.js b/codecs/oxipng/worker.js index 00a99dc2..0778cdff 100644 --- a/codecs/oxipng/worker.js +++ b/codecs/oxipng/worker.js @@ -1,8 +1,7 @@ import initOxiPNG, { start_worker_thread } from './pkg/squoosh_oxipng.js'; -addEventListener('message', async ({ data: [module, memory, threadPtr] }) => { - // console.log([module, memory, threadPtr]); +addEventListener('message', async ({ data: [module, memory] }) => { + postMessage(null); await initOxiPNG(module, memory); - // console.log('Starting', threadPtr); - start_worker_thread(threadPtr); + start_worker_thread(); }, { once: true }); diff --git a/src/codecs/oxipng/encoder.ts b/src/codecs/oxipng/encoder.ts index 0c605a86..69b17091 100644 --- a/src/codecs/oxipng/encoder.ts +++ b/src/codecs/oxipng/encoder.ts @@ -1,7 +1,7 @@ // @ts-ignore -import { optimise } from '../../../codecs/oxipng/spawn.js'; +import optimiser from '../../../codecs/oxipng/spawn.js'; import { EncodeOptions } from './encoder-meta'; export async function compress(data: ArrayBuffer, options: EncodeOptions): Promise { - return (await optimise(new Uint8Array(data), options.level)).buffer; + return (await optimiser).optimise(new Uint8Array(data), options.level).buffer; }