summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-09-27 17:33:10 -0400
committerGitHub <noreply@github.com>2018-09-27 17:33:10 -0400
commitd38ccfc6dcb8643daa4f9e695d47a79cf068f90e (patch)
treed36ad2934e8550242d50e866f4ad2b6c303646b7 /js
parentbf93ca54dd85686c7b93a6189913e48e10de8dcf (diff)
Support zero-copy data in libdeno.send(). (#838)
This is a large API refactor of deno.h which replaces deno_send() and deno_set_response() with deno_respond(). It also adds a req_id parameter to the deno_recv_cb. Make writeFile/writeFileSync use it.
Diffstat (limited to 'js')
-rw-r--r--js/dispatch.ts14
-rw-r--r--js/libdeno.ts2
-rw-r--r--js/write_file.ts6
3 files changed, 11 insertions, 11 deletions
diff --git a/js/dispatch.ts b/js/dispatch.ts
index 037b77a85..9257be767 100644
--- a/js/dispatch.ts
+++ b/js/dispatch.ts
@@ -28,10 +28,11 @@ export function handleAsyncMsgFromRust(ui8: Uint8Array) {
export function sendAsync(
builder: flatbuffers.Builder,
msgType: fbs.Any,
- msg: flatbuffers.Offset
+ msg: flatbuffers.Offset,
+ data?: ArrayBufferView
): Promise<fbs.Base> {
maybePushTrace(msgType, false); // add to trace if tracing
- const [cmdId, resBuf] = sendInternal(builder, msgType, msg, false);
+ const [cmdId, resBuf] = sendInternal(builder, msgType, msg, data, false);
util.assert(resBuf == null);
const promise = util.createResolvable<fbs.Base>();
promiseTable.set(cmdId, promise);
@@ -42,16 +43,16 @@ export function sendAsync(
export function sendSync(
builder: flatbuffers.Builder,
msgType: fbs.Any,
- msg: flatbuffers.Offset
+ msg: flatbuffers.Offset,
+ data?: ArrayBufferView
): null | fbs.Base {
maybePushTrace(msgType, true); // add to trace if tracing
- const [cmdId, resBuf] = sendInternal(builder, msgType, msg, true);
+ const [cmdId, resBuf] = sendInternal(builder, msgType, msg, data, true);
util.assert(cmdId >= 0);
if (resBuf == null) {
return null;
} else {
const u8 = new Uint8Array(resBuf!);
- // console.log("recv sync message", util.hexdump(u8));
const bb = new flatbuffers.ByteBuffer(u8);
const baseRes = fbs.Base.getRootAsBase(bb);
errors.maybeThrowError(baseRes);
@@ -63,6 +64,7 @@ function sendInternal(
builder: flatbuffers.Builder,
msgType: fbs.Any,
msg: flatbuffers.Offset,
+ data: undefined | ArrayBufferView,
sync = true
): [number, null | Uint8Array] {
const cmdId = nextCmdId++;
@@ -73,5 +75,5 @@ function sendInternal(
fbs.Base.addCmdId(builder, cmdId);
builder.finish(fbs.Base.endBase(builder));
- return [cmdId, libdeno.send(builder.asUint8Array())];
+ return [cmdId, libdeno.send(builder.asUint8Array(), data)];
}
diff --git a/js/libdeno.ts b/js/libdeno.ts
index 8445a2d2b..afd6f1aec 100644
--- a/js/libdeno.ts
+++ b/js/libdeno.ts
@@ -6,7 +6,7 @@ type MessageCallback = (msg: Uint8Array) => void;
interface Libdeno {
recv(cb: MessageCallback): void;
- send(msg: ArrayBufferView): null | Uint8Array;
+ send(control: ArrayBufferView, data?: ArrayBufferView): null | Uint8Array;
print(x: string, isErr?: boolean): void;
diff --git a/js/write_file.ts b/js/write_file.ts
index 60c6ff6ab..f9810cb35 100644
--- a/js/write_file.ts
+++ b/js/write_file.ts
@@ -41,14 +41,12 @@ function req(
filename: string,
data: Uint8Array,
perm: number
-): [flatbuffers.Builder, fbs.Any, flatbuffers.Offset] {
+): [flatbuffers.Builder, fbs.Any, flatbuffers.Offset, Uint8Array] {
const builder = new flatbuffers.Builder();
const filename_ = builder.createString(filename);
- const dataOffset = fbs.WriteFile.createDataVector(builder, data);
fbs.WriteFile.startWriteFile(builder);
fbs.WriteFile.addFilename(builder, filename_);
- fbs.WriteFile.addData(builder, dataOffset);
fbs.WriteFile.addPerm(builder, perm);
const msg = fbs.WriteFile.endWriteFile(builder);
- return [builder, fbs.Any.WriteFile, msg];
+ return [builder, fbs.Any.WriteFile, msg, data];
}