mirror of
https://github.com/denoland/deno.git
synced 2025-08-03 10:33:54 +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
25
core/lib.deno_core.d.ts
vendored
25
core/lib.deno_core.d.ts
vendored
|
@ -56,25 +56,18 @@ declare namespace Deno {
|
|||
* (`WebAssembly.compileStreaming` and `WebAssembly.instantiateStreaming`)
|
||||
* are called in order to feed the source's bytes to the wasm compiler.
|
||||
* The callback is called with the source argument passed to the streaming
|
||||
* APIs and an rid to use with `Deno.core.wasmStreamingFeed`.
|
||||
* APIs and an rid to use with the wasm streaming ops.
|
||||
*
|
||||
* The callback should eventually invoke the following ops:
|
||||
* - `op_wasm_streaming_feed`. Feeds bytes from the wasm resource to the
|
||||
* compiler. Takes the rid and a `Uint8Array`.
|
||||
* - `op_wasm_streaming_abort`. Aborts the wasm compilation. Takes the rid
|
||||
* and an exception. Invalidates the resource.
|
||||
* - To indicate the end of the resource, use `Deno.core.close()` with the
|
||||
* rid.
|
||||
*/
|
||||
function setWasmStreamingCallback(
|
||||
cb: (source: any, rid: number) => void,
|
||||
): void;
|
||||
|
||||
/**
|
||||
* Affect the state of the WebAssembly streaming compiler, by either passing
|
||||
* it bytes, aborting it, or indicating that all bytes were received.
|
||||
* `rid` must be a resource ID that was passed to the callback set with
|
||||
* `Deno.core.setWasmStreamingCallback`. Calling this function with `type`
|
||||
* set to either "abort" or "finish" invalidates the rid.
|
||||
*/
|
||||
function wasmStreamingFeed(
|
||||
rid: number,
|
||||
type: "bytes",
|
||||
bytes: Uint8Array,
|
||||
): void;
|
||||
function wasmStreamingFeed(rid: number, type: "abort", error: any): void;
|
||||
function wasmStreamingFeed(rid: number, type: "finish"): void;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue