From a60f4f9ec4bd339a35469d63c5cec3dc8197f87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Mon, 8 Jul 2024 14:30:49 +0200 Subject: [PATCH] fix JS testing decoder --- Cargo.lock | 11 ++++--- src-tauri/Cargo.toml | 1 + src-tauri/src/component_manager.rs | 2 +- src-tauri/src/lib.rs | 30 ++++++++++++------ .../javascript_decoder.wasm | Bin 10108533 -> 10108530 bytes .../javascript_decoder/src/index.js | 2 +- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e499807..04016b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1691,6 +1691,7 @@ checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" name = "fastwave" version = "0.1.0" dependencies = [ + "futures", "once_cell", "serde", "serde_json", @@ -1840,12 +1841,13 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", + "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -1870,9 +1872,9 @@ checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1943,6 +1945,7 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", "futures-io", "futures-macro", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index f0b386c..8884690 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -24,6 +24,7 @@ tauri = { version = "=2.0.0-beta.22", features = ["macos-private-api", "linux-ip tauri-plugin-window-state = "=2.0.0-beta.9" tauri-plugin-dialog = "=2.0.0-beta.9" once_cell = "1.19.0" +futures = "0.3.30" # wasmtime = "22.0.0" # wasmtime-wasi = "22.0.0" diff --git a/src-tauri/src/component_manager.rs b/src-tauri/src/component_manager.rs index 8d92458..69faa11 100644 --- a/src-tauri/src/component_manager.rs +++ b/src-tauri/src/component_manager.rs @@ -79,7 +79,7 @@ pub async fn remove_all_decoders() -> RemovedDecodersCount { // All Release // FW.add_decoders(["../../test_files/components/rust_decoder/rust_decoder.wasm", "../../test_files/components/javascript_decoder/javascript_decoder.wasm", "../../test_files/components/python_decoder/python_decoder.wasm"]) pub async fn add_decoders(decoder_paths: Vec) -> AddedDecodersCount { - println!("decoders in Tauri: {decoder_paths:#?}"); + println!("Decoders: {decoder_paths:#?}"); println!("Current dir: {:#?}", std::env::current_dir().unwrap()); let mut added_decoders_count = 0; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 9a2cb18..0d2df5b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -87,15 +87,27 @@ async fn load_signal_and_get_timeline( var_format, |mut value: String| { Box::pin(async { - let decoders = component_manager::DECODERS.read().await; - let mut store_lock = component_manager::STORE.lock().await; - let mut store = store_lock.as_context_mut(); - for decoder in decoders.iter() { - value = decoder - .component_decoder_decoder() - .call_format_signal_value(&mut store, &value) - .unwrap() - } + // We need to spawn a (non-runtime-specific?) blocking task before calling component methods to prevent this error: + // "Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks." + // @TODO Workaround? Is it a problem only for non-Rust components? Is it needed only when there is a problem in the component (e.g. "`Err` value: wasm trap: cannot enter component instance"?) + // let value = std::thread::spawn(move || { + // futures::executor::block_on(async move { + let decoders = component_manager::DECODERS.read().await; + let mut store_lock = component_manager::STORE.lock().await; + let mut store = store_lock.as_context_mut(); + + for decoder in decoders.iter() { + value = decoder + .component_decoder_decoder() + .call_format_signal_value(&mut store, &value) + // @TODO Resolve panic when running non-Rust components: + // `Err` value: wasm trap: cannot enter component instance + // https://github.com/bytecodealliance/wasmtime/issues/8670 ? + .unwrap() + } + // value + // }) + // }).join().unwrap(); value }) }, diff --git a/test_files/components/javascript_decoder/javascript_decoder.wasm b/test_files/components/javascript_decoder/javascript_decoder.wasm index 56fc06f3f4eca49d228450247e110baffb392e94..de925088b067b3980182f4cc7dc723daa6f8912c 100644 GIT binary patch delta 6734 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 AxBvhE delta 6461 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 diff --git a/test_files/components/javascript_decoder/src/index.js b/test_files/components/javascript_decoder/src/index.js index 4b33938..add3212 100644 --- a/test_files/components/javascript_decoder/src/index.js +++ b/test_files/components/javascript_decoder/src/index.js @@ -10,7 +10,7 @@ export const decoder = { return name }, formatSignalValue(value) { - value + "!" + return value + "!" } }