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

Unified Diff: runtime/bin/vmservice/observatory/lib/service_common.dart

Issue 474633002: Optional binary payloads in VM service events. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: runtime/bin/vmservice/observatory/lib/service_common.dart
===================================================================
--- runtime/bin/vmservice/observatory/lib/service_common.dart (revision 39216)
+++ runtime/bin/vmservice/observatory/lib/service_common.dart (working copy)
@@ -6,6 +6,7 @@
import 'dart:async';
import 'dart:convert';
+import 'dart:typed_data';
import 'package:logging/logging.dart';
import 'package:observatory/service.dart';
@@ -69,6 +70,7 @@
bool get isOpen;
void send(dynamic data);
void close();
+ Future<ByteData> nonStringToByteData(dynamic data);
}
/// A [CommonWebSocketVM] communicates with a Dart VM over a CommonWebSocket.
@@ -160,7 +162,21 @@
// WebSocket message event handler.
void _onMessage(dynamic data) {
- assert(data is String); // We don't handle binary data, yet.
+ if (data is! String) {
+ _webSocket.nonStringToByteData(data).then((ByteData bytes) {
+ // See format spec. in VMs Service::SendEvent.
+ int offset = 0;
+ int metaSize = bytes.getUint64(offset, Endianness.BIG_ENDIAN);
+ offset += 8;
+ var meta = new Utf8Decoder().convert(new Uint8List.view(
+ bytes.buffer, bytes.offsetInBytes + offset, metaSize));
+ offset += metaSize;
+ var data = new ByteData.view(
+ bytes.buffer, bytes.offsetInBytes + offset);
+ postEventMessage(meta, data);
+ });
+ return;
+ }
var map = JSON.decode(data);
if (map == null) {
Logger.root.severe('WebSocketVM got empty message');

Powered by Google App Engine
This is Rietveld 408576698