| Index: mojo/public/bindings/js/codec.js
|
| diff --git a/mojo/public/bindings/js/codec.js b/mojo/public/bindings/js/codec.js
|
| index 2df9c469571dc19d64a86333389583d62a5db641..d2d108ac547fa4e6b7ef5339d1cf9327041dc4b7 100644
|
| --- a/mojo/public/bindings/js/codec.js
|
| +++ b/mojo/public/bindings/js/codec.js
|
| @@ -81,6 +81,10 @@ define(function() {
|
| this.memory = newMemory;
|
| };
|
|
|
| + Buffer.prototype.createViewOfAllocatedMemory = function() {
|
| + return new Uint8Array(this.memory.buffer, 0, this.next);
|
| + };
|
| +
|
| // Constants ----------------------------------------------------------------
|
|
|
| var kArrayHeaderSize = 8;
|
| @@ -212,7 +216,7 @@ define(function() {
|
| };
|
|
|
| Encoder.prototype.createAndEncodeEncoder = function(size) {
|
| - var pointer = this.buffer.alloc(size);
|
| + var pointer = this.buffer.alloc(align(size));
|
| this.encodePointer(pointer);
|
| return new Encoder(this.buffer, this.handles, pointer);
|
| };
|
| @@ -277,6 +281,8 @@ define(function() {
|
| // MessageBuilder -----------------------------------------------------------
|
|
|
| function MessageBuilder(messageName, payloadSize) {
|
| + // Currently, we don't compute the payload size correctly ahead of time.
|
| + // Instead, we overwrite this field at the end.
|
| var numberOfBytes = kMessageHeaderSize + payloadSize;
|
| this.buffer = new Buffer(numberOfBytes);
|
| this.handles = [];
|
| @@ -295,7 +301,11 @@ define(function() {
|
| };
|
|
|
| MessageBuilder.prototype.finish = function() {
|
| - var message = new Message(this.buffer.memory, this.handles);
|
| + // TODO(abarth): Rather than resizing the buffer at the end, we could
|
| + // compute the size we need ahead of time, like we do in C++.
|
| + var memory = this.buffer.createViewOfAllocatedMemory();
|
| + store32(memory, 0, memory.length);
|
| + var message = new Message(memory, this.handles);
|
| this.buffer = null;
|
| this.handles = null;
|
| this.encoder = null;
|
|
|