mirror of
https://github.com/denoland/deno.git
synced 2025-09-20 17:39:51 +00:00
Refactor dispatch handling (#2452)
Promise id is now created in core and passed back to JS.
This commit is contained in:
parent
fdd2eb5383
commit
dc60fe9f30
18 changed files with 667 additions and 709 deletions
|
@ -151,14 +151,27 @@ SharedQueue Binary Layout
|
|||
|
||||
function handleAsyncMsgFromRust(buf) {
|
||||
if (buf) {
|
||||
asyncHandler(buf);
|
||||
handleAsyncMsgFromRustInner(buf);
|
||||
} else {
|
||||
while ((buf = shift()) != null) {
|
||||
asyncHandler(buf);
|
||||
handleAsyncMsgFromRustInner(buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleAsyncMsgFromRustInner(buf) {
|
||||
// DataView to extract cmdId value.
|
||||
const dataView = new DataView(buf.buffer, buf.byteOffset, 4);
|
||||
const promiseId = dataView.getInt32(0);
|
||||
// Uint8 buffer view shifted right and shortened 4 bytes to remove cmdId from view window.
|
||||
const bufViewFinal = new Uint8Array(
|
||||
buf.buffer,
|
||||
buf.byteOffset + 4,
|
||||
buf.byteLength - 4
|
||||
);
|
||||
asyncHandler(promiseId, bufViewFinal);
|
||||
}
|
||||
|
||||
function dispatch(control, zeroCopy = null) {
|
||||
maybeInit();
|
||||
// First try to push control to shared.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue