mirror of
https://github.com/denoland/deno.git
synced 2025-08-03 18:38:33 +00:00
refactor(core): Turn the wasm_streaming_feed
binding into ops (#11985)
Async WebAssembly compilation was implemented by adding two bindings: `set_wasm_streaming_callback`, which registered a callback to be called whenever a streaming wasm compilation was started, and `wasm_streaming_feed`, which let the JS callback modify the state of the v8 wasm compiler. `set_wasm_streaming_callback` cannot currently be implemented as anything other than a binding, but `wasm_streaming_feed` does not really need to use anything specific to bindings, and could indeed be implemented as one or more ops. This PR does that, resulting in a simplification of the relevant code. There are three operations on the state of the v8 wasm compiler that `wasm_streaming_feed` allowed: feeding new bytes into the compiler, letting it know that there are no more bytes coming from the network, and aborting the compilation. This PR provides `op_wasm_streaming_feed` to feed new bytes into the compiler, and `op_wasm_streaming_abort` to abort the compilation. It doesn't provide an op to let v8 know that the response is finished, but closing the resource with `Deno.core.close()` will achieve that.
This commit is contained in:
parent
a95ca9dc70
commit
4d6f412b0b
4 changed files with 72 additions and 92 deletions
|
@ -505,8 +505,8 @@
|
|||
*
|
||||
* @param {any} source The source parameter that the WebAssembly
|
||||
* streaming API was called with.
|
||||
* @param {number} rid An rid that can be used with
|
||||
* `Deno.core.wasmStreamingFeed`.
|
||||
* @param {number} rid An rid that represents the wasm streaming
|
||||
* resource.
|
||||
*/
|
||||
function handleWasmStreaming(source, rid) {
|
||||
// This implements part of
|
||||
|
@ -543,15 +543,15 @@
|
|||
while (true) {
|
||||
const { value: chunk, done } = await reader.read();
|
||||
if (done) break;
|
||||
core.wasmStreamingFeed(rid, "bytes", chunk);
|
||||
core.opSync("op_wasm_streaming_feed", rid, chunk);
|
||||
}
|
||||
}
|
||||
|
||||
// 2.7.
|
||||
core.wasmStreamingFeed(rid, "finish");
|
||||
core.close(rid);
|
||||
} catch (err) {
|
||||
// 2.8 and 3
|
||||
core.wasmStreamingFeed(rid, "abort", err);
|
||||
core.opSync("op_wasm_streaming_abort", rid, err);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue