mirror of
https://github.com/denoland/deno.git
synced 2025-09-19 08:59:47 +00:00
core: Add test for snapshotting from Rust (#2197)
This commit is contained in:
parent
f694823507
commit
7fc9d7d62a
5 changed files with 78 additions and 35 deletions
|
@ -16,6 +16,8 @@ SharedQueue Binary Layout
|
|||
+---------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-use-before-define */
|
||||
|
||||
(window => {
|
||||
const GLOBAL_NAMESPACE = "Deno";
|
||||
const CORE_NAMESPACE = "core";
|
||||
|
@ -32,6 +34,25 @@ SharedQueue Binary Layout
|
|||
|
||||
let sharedBytes;
|
||||
let shared32;
|
||||
let initialized = false;
|
||||
|
||||
function maybeInit() {
|
||||
if (!initialized) {
|
||||
init();
|
||||
initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
function init() {
|
||||
let shared = Deno.core.shared;
|
||||
assert(shared.byteLength > 0);
|
||||
assert(sharedBytes == null);
|
||||
assert(shared32 == null);
|
||||
sharedBytes = new Uint8Array(shared);
|
||||
shared32 = new Int32Array(shared);
|
||||
// Callers should not call Deno.core.recv, use setAsyncHandler.
|
||||
Deno.core.recv(handleAsyncMsgFromRust);
|
||||
}
|
||||
|
||||
function assert(cond) {
|
||||
if (!cond) {
|
||||
|
@ -40,12 +61,14 @@ SharedQueue Binary Layout
|
|||
}
|
||||
|
||||
function reset() {
|
||||
maybeInit();
|
||||
shared32[INDEX_NUM_RECORDS] = 0;
|
||||
shared32[INDEX_NUM_SHIFTED_OFF] = 0;
|
||||
shared32[INDEX_HEAD] = HEAD_INIT;
|
||||
}
|
||||
|
||||
function head() {
|
||||
maybeInit();
|
||||
return shared32[INDEX_HEAD];
|
||||
}
|
||||
|
||||
|
@ -121,6 +144,7 @@ SharedQueue Binary Layout
|
|||
|
||||
let asyncHandler;
|
||||
function setAsyncHandler(cb) {
|
||||
maybeInit();
|
||||
assert(asyncHandler == null);
|
||||
asyncHandler = cb;
|
||||
}
|
||||
|
@ -135,17 +159,8 @@ SharedQueue Binary Layout
|
|||
}
|
||||
}
|
||||
|
||||
function init(shared) {
|
||||
assert(shared.byteLength > 0);
|
||||
assert(sharedBytes == null);
|
||||
assert(shared32 == null);
|
||||
sharedBytes = new Uint8Array(shared);
|
||||
shared32 = new Int32Array(shared);
|
||||
// Callers should not call Deno.core.recv, use setAsyncHandler.
|
||||
window.Deno.core.recv(handleAsyncMsgFromRust);
|
||||
}
|
||||
|
||||
function dispatch(control, zeroCopy = null) {
|
||||
maybeInit();
|
||||
// First try to push control to shared.
|
||||
const success = push(control);
|
||||
// If successful, don't use first argument of core.send.
|
||||
|
@ -170,6 +185,4 @@ SharedQueue Binary Layout
|
|||
assert(window[GLOBAL_NAMESPACE] != null);
|
||||
assert(window[GLOBAL_NAMESPACE][CORE_NAMESPACE] != null);
|
||||
Object.assign(core, denoCore);
|
||||
|
||||
init(Deno.core.shared);
|
||||
})(globalThis);
|
||||
})(this);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue