diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-09-27 17:33:10 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-27 17:33:10 -0400 |
commit | d38ccfc6dcb8643daa4f9e695d47a79cf068f90e (patch) | |
tree | d36ad2934e8550242d50e866f4ad2b6c303646b7 /js | |
parent | bf93ca54dd85686c7b93a6189913e48e10de8dcf (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.ts | 14 | ||||
-rw-r--r-- | js/libdeno.ts | 2 | ||||
-rw-r--r-- | js/write_file.ts | 6 |
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]; } |