summaryrefslogtreecommitdiff
path: root/js/main.ts
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2018-07-09 03:35:34 +0200
committerBert Belder <bertbelder@gmail.com>2018-07-12 21:26:38 +0200
commit24b0e91d8096f84a114f662e3eb42c83d0d3878d (patch)
treeacd9ae306618276020e75450c064ead463e64387 /js/main.ts
parentbbcd4c8dd33121868d82123a3d36e3df282af45f (diff)
Move buffers between V8 and native
* send()/recv() now operate on TypedArrays rather than ArrayBuffers. * Remove a copy (through ArrayBuffer.slice()) from the send path. * Remove a copy (through v8::ArrayBuffer::New()) from the return path. * After moving a buffer from JS to native, the ArrayBuffer object and it's views are made inaccessible ('neutered'). * `struct deno_buf` now holds two [ptr, length] tuples, one for the actual memory allocation, and one for the logical data contained therein. This is necessary because flatbuffers fills it's buffer bottom-up, so the serialized blob doesn't start at beginning of the buffer, but somewhere in the middle.
Diffstat (limited to 'js/main.ts')
-rw-r--r--js/main.ts13
1 files changed, 3 insertions, 10 deletions
diff --git a/js/main.ts b/js/main.ts
index 027baa3cf..379b69c97 100644
--- a/js/main.ts
+++ b/js/main.ts
@@ -19,7 +19,7 @@ function assignCmdId(): number {
return cmdId;
}
-function startMsg(cmdId: number): ArrayBuffer {
+function startMsg(cmdId: number): Uint8Array {
const builder = new flatbuffers.Builder();
const msg = fbs.Start.createStart(builder, 0);
fbs.Base.startBase(builder);
@@ -27,7 +27,7 @@ function startMsg(cmdId: number): ArrayBuffer {
fbs.Base.addMsg(builder, msg);
fbs.Base.addMsgType(builder, fbs.Any.Start);
builder.finish(fbs.Base.endBase(builder));
- return typedArrayToArrayBuffer(builder.asUint8Array());
+ return builder.asUint8Array();
}
window["denoMain"] = () => {
@@ -47,7 +47,7 @@ window["denoMain"] = () => {
}
// Deserialize res into startResMsg.
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(res));
+ const bb = new flatbuffers.ByteBuffer(res);
const base = fbs.Base.getRootAsBase(bb);
assert(base.cmdId() === cmdId);
assert(fbs.Any.StartRes === base.msgType());
@@ -69,10 +69,3 @@ window["denoMain"] = () => {
mod.compileAndRun();
*/
};
-
-function typedArrayToArrayBuffer(ta: Uint8Array): ArrayBuffer {
- return ta.buffer.slice(
- ta.byteOffset,
- ta.byteOffset + ta.byteLength
- ) as ArrayBuffer;
-}