diff options
author | andy finch <andyfinch7@gmail.com> | 2019-06-13 23:43:54 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-06-13 20:43:54 -0700 |
commit | dc60fe9f300043f191286ef804a365e16e455f87 (patch) | |
tree | c6b74e9faa6f26745b8770a18d0ae46ee34f3774 /core/shared_queue.js | |
parent | fdd2eb538327ee3f50fe2869320411191830c985 (diff) |
Refactor dispatch handling (#2452)
Promise id is now created in core and passed back to JS.
Diffstat (limited to 'core/shared_queue.js')
-rw-r--r-- | core/shared_queue.js | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/core/shared_queue.js b/core/shared_queue.js index 75f370ce4..b413f011e 100644 --- a/core/shared_queue.js +++ b/core/shared_queue.js @@ -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. |