| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 define(function() { | 5 define(function() { |
| 6 | 6 |
| 7 // Memory ------------------------------------------------------------------- | 7 // Memory ------------------------------------------------------------------- |
| 8 | 8 |
| 9 function store8(memory, pointer, val) { | 9 function store8(memory, pointer, val) { |
| 10 memory[pointer] = val; | 10 memory[pointer] = val; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 Buffer.prototype.grow = function(size) { | 76 Buffer.prototype.grow = function(size) { |
| 77 var newMemory = new Uint8Array(size); | 77 var newMemory = new Uint8Array(size); |
| 78 var oldMemory = this.memory; | 78 var oldMemory = this.memory; |
| 79 for (var i = 0; i < oldMemory.length; ++i) | 79 for (var i = 0; i < oldMemory.length; ++i) |
| 80 newMemory[i] = oldMemory[i]; | 80 newMemory[i] = oldMemory[i]; |
| 81 this.memory = newMemory; | 81 this.memory = newMemory; |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 Buffer.prototype.createViewOfAllocatedMemory = function() { |
| 85 return new Uint8Array(this.memory.buffer, 0, this.next); |
| 86 }; |
| 87 |
| 84 // Constants ---------------------------------------------------------------- | 88 // Constants ---------------------------------------------------------------- |
| 85 | 89 |
| 86 var kArrayHeaderSize = 8; | 90 var kArrayHeaderSize = 8; |
| 87 var kStructHeaderSize = 8; | 91 var kStructHeaderSize = 8; |
| 88 var kMessageHeaderSize = 8; | 92 var kMessageHeaderSize = 8; |
| 89 | 93 |
| 90 // Decoder ------------------------------------------------------------------ | 94 // Decoder ------------------------------------------------------------------ |
| 91 | 95 |
| 92 function Decoder(memory, handles, base) { | 96 function Decoder(memory, handles, base) { |
| 93 this.memory = memory; | 97 this.memory = memory; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 Encoder.prototype.encodePointer = function(pointer) { | 209 Encoder.prototype.encodePointer = function(pointer) { |
| 206 if (!pointer) | 210 if (!pointer) |
| 207 return this.write64(0); | 211 return this.write64(0); |
| 208 // TODO(abarth): To correctly encode a pointer, we need to know the real | 212 // TODO(abarth): To correctly encode a pointer, we need to know the real |
| 209 // base address of the array buffer. | 213 // base address of the array buffer. |
| 210 var offset = pointer - this.next; | 214 var offset = pointer - this.next; |
| 211 this.write64(offset); | 215 this.write64(offset); |
| 212 }; | 216 }; |
| 213 | 217 |
| 214 Encoder.prototype.createAndEncodeEncoder = function(size) { | 218 Encoder.prototype.createAndEncodeEncoder = function(size) { |
| 215 var pointer = this.buffer.alloc(size); | 219 var pointer = this.buffer.alloc(align(size)); |
| 216 this.encodePointer(pointer); | 220 this.encodePointer(pointer); |
| 217 return new Encoder(this.buffer, this.handles, pointer); | 221 return new Encoder(this.buffer, this.handles, pointer); |
| 218 }; | 222 }; |
| 219 | 223 |
| 220 Encoder.prototype.encodeHandle = function(handle) { | 224 Encoder.prototype.encodeHandle = function(handle) { |
| 221 this.handles.push(handle); | 225 this.handles.push(handle); |
| 222 this.write32(this.handles.length - 1); | 226 this.write32(this.handles.length - 1); |
| 223 }; | 227 }; |
| 224 | 228 |
| 225 Encoder.prototype.encodeString = function(val) { | 229 Encoder.prototype.encodeString = function(val) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 // Message ------------------------------------------------------------------ | 274 // Message ------------------------------------------------------------------ |
| 271 | 275 |
| 272 function Message(memory, handles) { | 276 function Message(memory, handles) { |
| 273 this.memory = memory; | 277 this.memory = memory; |
| 274 this.handles = handles; | 278 this.handles = handles; |
| 275 } | 279 } |
| 276 | 280 |
| 277 // MessageBuilder ----------------------------------------------------------- | 281 // MessageBuilder ----------------------------------------------------------- |
| 278 | 282 |
| 279 function MessageBuilder(messageName, payloadSize) { | 283 function MessageBuilder(messageName, payloadSize) { |
| 284 // Currently, we don't compute the payload size correctly ahead of time. |
| 285 // Instead, we overwrite this field at the end. |
| 280 var numberOfBytes = kMessageHeaderSize + payloadSize; | 286 var numberOfBytes = kMessageHeaderSize + payloadSize; |
| 281 this.buffer = new Buffer(numberOfBytes); | 287 this.buffer = new Buffer(numberOfBytes); |
| 282 this.handles = []; | 288 this.handles = []; |
| 283 var encoder = this.createEncoder(kMessageHeaderSize); | 289 var encoder = this.createEncoder(kMessageHeaderSize); |
| 284 encoder.write32(numberOfBytes); | 290 encoder.write32(numberOfBytes); |
| 285 encoder.write32(messageName); | 291 encoder.write32(messageName); |
| 286 } | 292 } |
| 287 | 293 |
| 288 MessageBuilder.prototype.createEncoder = function(size) { | 294 MessageBuilder.prototype.createEncoder = function(size) { |
| 289 var pointer = this.buffer.alloc(size); | 295 var pointer = this.buffer.alloc(size); |
| 290 return new Encoder(this.buffer, this.handles, pointer); | 296 return new Encoder(this.buffer, this.handles, pointer); |
| 291 } | 297 } |
| 292 | 298 |
| 293 MessageBuilder.prototype.encodeStruct = function(cls, val) { | 299 MessageBuilder.prototype.encodeStruct = function(cls, val) { |
| 294 cls.encode(this.createEncoder(cls.encodedSize), val); | 300 cls.encode(this.createEncoder(cls.encodedSize), val); |
| 295 }; | 301 }; |
| 296 | 302 |
| 297 MessageBuilder.prototype.finish = function() { | 303 MessageBuilder.prototype.finish = function() { |
| 298 var message = new Message(this.buffer.memory, this.handles); | 304 // TODO(abarth): Rather than resizing the buffer at the end, we could |
| 305 // compute the size we need ahead of time, like we do in C++. |
| 306 var memory = this.buffer.createViewOfAllocatedMemory(); |
| 307 store32(memory, 0, memory.length); |
| 308 var message = new Message(memory, this.handles); |
| 299 this.buffer = null; | 309 this.buffer = null; |
| 300 this.handles = null; | 310 this.handles = null; |
| 301 this.encoder = null; | 311 this.encoder = null; |
| 302 return message; | 312 return message; |
| 303 }; | 313 }; |
| 304 | 314 |
| 305 // MessageReader ------------------------------------------------------------ | 315 // MessageReader ------------------------------------------------------------ |
| 306 | 316 |
| 307 function MessageReader(message) { | 317 function MessageReader(message) { |
| 308 this.decoder = new Decoder(message.memory, message.handles, 0); | 318 this.decoder = new Decoder(message.memory, message.handles, 0); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 exports.kStructHeaderSize = kStructHeaderSize; | 414 exports.kStructHeaderSize = kStructHeaderSize; |
| 405 exports.kMessageHeaderSize = kMessageHeaderSize; | 415 exports.kMessageHeaderSize = kMessageHeaderSize; |
| 406 exports.Uint8 = Uint8; | 416 exports.Uint8 = Uint8; |
| 407 exports.Uint16 = Uint16; | 417 exports.Uint16 = Uint16; |
| 408 exports.Uint32 = Uint32; | 418 exports.Uint32 = Uint32; |
| 409 exports.Uint64 = Uint64; | 419 exports.Uint64 = Uint64; |
| 410 exports.PointerTo = PointerTo; | 420 exports.PointerTo = PointerTo; |
| 411 exports.Handle = Handle; | 421 exports.Handle = Handle; |
| 412 return exports; | 422 return exports; |
| 413 }); | 423 }); |
| OLD | NEW |