Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(718)

Side by Side Diff: mojo/public/bindings/js/codec.js

Issue 63033010: Mojo's C++ and JavaScript bindings should produce identical messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gin/test/file_runner.cc ('k') | mojo/public/bindings/js/codec_unittests.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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 });
OLDNEW
« no previous file with comments | « gin/test/file_runner.cc ('k') | mojo/public/bindings/js/codec_unittests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698