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

Side by Side Diff: mojo/public/dart/src/codec.dart

Issue 800523004: Dart: Simplifies the handle watcher. Various cleanups and bugfixes. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: cleanup Created 5 years, 11 months 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
« no previous file with comments | « mojo/public/dart/src/client.dart ('k') | mojo/public/dart/src/data_pipe.dart » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // TODO(zra): Rewrite MojoDecoder and MojoEncoder using Dart idioms, and make 5 // TODO(zra): Rewrite MojoDecoder and MojoEncoder using Dart idioms, and make
6 // corresponding changes to the bindings generation script. 6 // corresponding changes to the bindings generation script.
7 7
8 part of bindings; 8 part of bindings;
9 9
10 const int kAlignment = 8; 10 const int kAlignment = 8;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 if (typeOrInstance is Type) { 62 if (typeOrInstance is Type) {
63 return reflectClass(typeOrInstance).getField(#encodedSize).reflectee; 63 return reflectClass(typeOrInstance).getField(#encodedSize).reflectee;
64 } else { 64 } else {
65 return typeOrInstance.encodedSize; 65 return typeOrInstance.encodedSize;
66 } 66 }
67 } 67 }
68 68
69 69
70 class MojoDecoder { 70 class MojoDecoder {
71 ByteData buffer; 71 ByteData buffer;
72 List<core.RawMojoHandle> handles; 72 List<core.MojoHandle> handles;
73 int base; 73 int base;
74 int next; 74 int next;
75 75
76 MojoDecoder(this.buffer, this.handles, this.base) { 76 MojoDecoder(this.buffer, this.handles, this.base) {
77 next = base; 77 next = base;
78 } 78 }
79 79
80 void skip(int offset) { 80 void skip(int offset) {
81 next += offset; 81 next += offset;
82 } 82 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 if (offset == 0) { 147 if (offset == 0) {
148 return 0; 148 return 0;
149 } 149 }
150 return offsetPointer + offset; 150 return offsetPointer + offset;
151 } 151 }
152 152
153 MojoDecoder decodeAndCreateDecoder(int offset) { 153 MojoDecoder decodeAndCreateDecoder(int offset) {
154 return new MojoDecoder(buffer, handles, offset); 154 return new MojoDecoder(buffer, handles, offset);
155 } 155 }
156 156
157 core.RawMojoHandle decodeHandle() { 157 core.MojoHandle decodeHandle() {
158 int handleIndex = readUint32(); 158 int handleIndex = readUint32();
159 return (handleIndex == kEncodedInvalidHandleValue) ? 159 return (handleIndex == kEncodedInvalidHandleValue) ?
160 new core.RawMojoHandle(core.RawMojoHandle.INVALID) : 160 new core.MojoHandle(core.MojoHandle.INVALID) :
161 handles[handleIndex]; 161 handles[handleIndex];
162 } 162 }
163 163
164 String decodeString() { 164 String decodeString() {
165 int numBytes = readUint32(); 165 int numBytes = readUint32();
166 int numElements = readUint32(); 166 int numElements = readUint32();
167 int base = next; 167 int base = next;
168 next += numElements; 168 next += numElements;
169 return stringOfUtf8(buffer.buffer.asUint8List(base, numElements)); 169 return stringOfUtf8(buffer.buffer.asUint8List(base, numElements));
170 } 170 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 return null; 233 return null;
234 } 234 }
235 MojoDecoder decoder = decodeAndCreateDecoder(pointer); 235 MojoDecoder decoder = decodeAndCreateDecoder(pointer);
236 return decoder.decodeMap(keyType, valType); 236 return decoder.decodeMap(keyType, valType);
237 } 237 }
238 } 238 }
239 239
240 240
241 class MojoEncoder { 241 class MojoEncoder {
242 ByteData buffer; 242 ByteData buffer;
243 List<core.RawMojoHandle> handles; 243 List<core.MojoHandle> handles;
244 int base; 244 int base;
245 int next; 245 int next;
246 int extent; 246 int extent;
247 247
248 MojoEncoder(this.buffer, this.handles, this.base, this.extent) { 248 MojoEncoder(this.buffer, this.handles, this.base, this.extent) {
249 next = base; 249 next = base;
250 } 250 }
251 251
252 void skip(int offset) { 252 void skip(int offset) {
253 next += offset; 253 next += offset;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 } 340 }
341 return pointer; 341 return pointer;
342 } 342 }
343 343
344 MojoEncoder createAndEncodeEncoder(int size) { 344 MojoEncoder createAndEncodeEncoder(int size) {
345 int pointer = alloc(align(size)); 345 int pointer = alloc(align(size));
346 encodePointer(pointer); 346 encodePointer(pointer);
347 return new MojoEncoder(buffer, handles, pointer, extent); 347 return new MojoEncoder(buffer, handles, pointer, extent);
348 } 348 }
349 349
350 void encodeHandle(core.RawMojoHandle handle) { 350 void encodeHandle(core.MojoHandle handle) {
351 if (handle.isValid) { 351 if (handle.isValid) {
352 handles.add(handle); 352 handles.add(handle);
353 writeUint32(handles.length - 1); 353 writeUint32(handles.length - 1);
354 } else { 354 } else {
355 writeUint32(kEncodedInvalidHandleValue); 355 writeUint32(kEncodedInvalidHandleValue);
356 } 356 }
357 } 357 }
358 358
359 void encodeString(String val) { 359 void encodeString(String val) {
360 Uint8List utf8string = utf8OfString(val); 360 Uint8List utf8string = utf8OfString(val);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 459
460 460
461 const int kMessageNameOffset = kStructHeaderSize; 461 const int kMessageNameOffset = kStructHeaderSize;
462 const int kMessageFlagsOffset = kMessageNameOffset + 4; 462 const int kMessageFlagsOffset = kMessageNameOffset + 4;
463 const int kMessageRequestIDOffset = kMessageFlagsOffset + 4; 463 const int kMessageRequestIDOffset = kMessageFlagsOffset + 4;
464 const int kMessageExpectsResponse = 1 << 0; 464 const int kMessageExpectsResponse = 1 << 0;
465 const int kMessageIsResponse = 1 << 1; 465 const int kMessageIsResponse = 1 << 1;
466 466
467 class Message { 467 class Message {
468 ByteData buffer; 468 ByteData buffer;
469 List<core.RawMojoHandle> handles; 469 List<core.MojoHandle> handles;
470 470
471 Message(this.buffer, this.handles); 471 Message(this.buffer, this.handles);
472 472
473 int getHeaderNumBytes() => buffer.getUint32(kStructHeaderNumBytesOffset); 473 int get headerNumBytes =>
474 int getHeaderNumFields() => buffer.getUint32(kStructHeaderNumFieldsOffset); 474 buffer.getUint32(kStructHeaderNumBytesOffset, Endianness.LITTLE_ENDIAN);
475 int getName() => buffer.getUint32(kMessageNameOffset); 475 int get headerNumFields =>
476 int getFlags() => buffer.getUint32(kMessageFlagsOffset); 476 buffer.getUint32(kStructHeaderNumFieldsOffset, Endianness.LITTLE_ENDIAN);
477 bool isResponse() => (getFlags() & kMessageIsResponse) != 0; 477 int get name =>
478 bool expectsResponse() => (getFlags() & kMessageExpectsResponse) != 0; 478 buffer.getUint32(kMessageNameOffset, Endianness.LITTLE_ENDIAN);
479 479 int get flags =>
480 void setRequestID(int id) { 480 buffer.getUint32(kMessageFlagsOffset, Endianness.LITTLE_ENDIAN);
481 buffer.setUint64(kMessageRequestIDOffset, id); 481 int get requestID =>
482 } 482 buffer.getUint64(kMessageRequestIDOffset, Endianness.LITTLE_ENDIAN);
483 set requestID(int id) =>
484 buffer.setUint64(kMessageRequestIDOffset, id, Endianness.LITTLE_ENDIAN);
485 bool get isResponse => (flags & kMessageIsResponse) != 0;
486 bool get expectsResponse => (flags & kMessageExpectsResponse) != 0;
483 } 487 }
484 488
485 489
486 class MessageBuilder { 490 class MessageBuilder {
487 MojoEncoder encoder; 491 MojoEncoder encoder;
488 List<core.RawMojoHandle> handles; 492 List<core.MojoHandle> handles;
489 493
490 MessageBuilder._(); 494 MessageBuilder._();
491 495
492 MessageBuilder(int name, int payloadSize) { 496 MessageBuilder(int name, int payloadSize) {
493 int numBytes = kMessageHeaderSize + payloadSize; 497 int numBytes = kMessageHeaderSize + payloadSize;
494 var buffer = new ByteData(numBytes); 498 var buffer = new ByteData(numBytes);
495 handles = <core.RawMojoHandle>[]; 499 handles = <core.MojoHandle>[];
496 500
497 encoder = new MojoEncoder(buffer, handles, 0, kMessageHeaderSize); 501 encoder = new MojoEncoder(buffer, handles, 0, kMessageHeaderSize);
498 encoder.writeUint32(kMessageHeaderSize); 502 encoder.writeUint32(kMessageHeaderSize);
499 encoder.writeUint32(2); // num_fields; 503 encoder.writeUint32(2); // num_fields;
500 encoder.writeUint32(name); 504 encoder.writeUint32(name);
501 encoder.writeUint32(0); // flags. 505 encoder.writeUint32(0); // flags.
502 } 506 }
503 507
504 MojoEncoder createEncoder(int size) { 508 MojoEncoder createEncoder(int size) {
505 encoder = new MojoEncoder(encoder.buffer, 509 encoder = new MojoEncoder(encoder.buffer,
(...skipping 20 matching lines...) Expand all
526 } 530 }
527 } 531 }
528 532
529 533
530 class MessageWithRequestIDBuilder extends MessageBuilder { 534 class MessageWithRequestIDBuilder extends MessageBuilder {
531 MessageWithRequestIDBuilder( 535 MessageWithRequestIDBuilder(
532 int name, int payloadSize, int requestID, [int flags = 0]) 536 int name, int payloadSize, int requestID, [int flags = 0])
533 : super._() { 537 : super._() {
534 int numBytes = kMessageWithRequestIDHeaderSize + payloadSize; 538 int numBytes = kMessageWithRequestIDHeaderSize + payloadSize;
535 var buffer = new ByteData(numBytes); 539 var buffer = new ByteData(numBytes);
536 handles = <core.RawMojoHandle>[]; 540 handles = <core.MojoHandle>[];
537 541
538 encoder = new MojoEncoder( 542 encoder = new MojoEncoder(
539 buffer, handles, 0, kMessageWithRequestIDHeaderSize); 543 buffer, handles, 0, kMessageWithRequestIDHeaderSize);
540 encoder.writeUint32(kMessageWithRequestIDHeaderSize); 544 encoder.writeUint32(kMessageWithRequestIDHeaderSize);
541 encoder.writeUint32(3); // num_fields. 545 encoder.writeUint32(3); // num_fields.
542 encoder.writeUint32(name); 546 encoder.writeUint32(name);
543 encoder.writeUint32(flags); 547 encoder.writeUint32(flags);
544 encoder.writeUint64(requestID); 548 encoder.writeUint64(requestID);
545 } 549 }
546 } 550 }
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 } 732 }
729 733
730 734
731 class NullableArrayOf extends ArrayOf { 735 class NullableArrayOf extends ArrayOf {
732 NullableArrayOf(Object val, [int length = 0]) : super(val, length); 736 NullableArrayOf(Object val, [int length = 0]) : super(val, length);
733 } 737 }
734 738
735 739
736 class Handle { 740 class Handle {
737 static const int encodedSize = 4; 741 static const int encodedSize = 4;
738 static core.RawMojoHandle decode(MojoDecoder decoder) => 742 static core.MojoHandle decode(MojoDecoder decoder) =>
739 decoder.decodeHandle(); 743 decoder.decodeHandle();
740 static void encode(MojoEncoder encoder, core.RawMojoHandle val) { 744 static void encode(MojoEncoder encoder, core.MojoHandle val) {
741 encoder.encodeHandle(val); 745 encoder.encodeHandle(val);
742 } 746 }
743 } 747 }
744 748
745 749
746 class NullableHandle { 750 class NullableHandle {
747 static const int encodedSize = Handle.encodedSize; 751 static const int encodedSize = Handle.encodedSize;
748 static const decode = Handle.decode; 752 static const decode = Handle.decode;
749 static const encode = Handle.encode; 753 static const encode = Handle.encode;
750 } 754 }
751 755
752 756
753 class MapOf { 757 class MapOf {
754 Object key; 758 Object key;
755 Object val; 759 Object val;
756 760
757 MapOf(this.key, this.val); 761 MapOf(this.key, this.val);
758 762
759 int encodedSize = 8; 763 int encodedSize = 8;
760 Map decode(MojoDecoder decoder) => decoder.decodeMapPointer(key, val); 764 Map decode(MojoDecoder decoder) => decoder.decodeMapPointer(key, val);
761 void encode(MojoEncoder encoder, Map map) { 765 void encode(MojoEncoder encoder, Map map) {
762 encoder.encodeMapPointer(key, val, map); 766 encoder.encodeMapPointer(key, val, map);
763 } 767 }
764 } 768 }
765 769
766 770
767 class NullableMapOf extends MapOf { 771 class NullableMapOf extends MapOf {
768 NullableMapOf(Object key, Object val) : super(key, val); 772 NullableMapOf(Object key, Object val) : super(key, val);
769 } 773 }
OLDNEW
« no previous file with comments | « mojo/public/dart/src/client.dart ('k') | mojo/public/dart/src/data_pipe.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698