| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of service; | 5 part of service; |
| 6 | 6 |
| 7 /// An RpcException represents an exceptional event that happened | 7 /// An RpcException represents an exceptional event that happened |
| 8 /// while invoking an rpc. | 8 /// while invoking an rpc. |
| 9 abstract class RpcException implements Exception { | 9 abstract class RpcException implements Exception { |
| 10 RpcException(this.message); | 10 RpcException(this.message); |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 @observable Duration get upTime => | 425 @observable Duration get upTime => |
| 426 (new DateTime.now().difference(startTime)); | 426 (new DateTime.now().difference(startTime)); |
| 427 | 427 |
| 428 VM() : super._empty(null) { | 428 VM() : super._empty(null) { |
| 429 name = 'vm'; | 429 name = 'vm'; |
| 430 vmName = 'vm'; | 430 vmName = 'vm'; |
| 431 _cache['vm'] = this; | 431 _cache['vm'] = this; |
| 432 update(toObservable({'id':'vm', 'type':'@VM'})); | 432 update(toObservable({'id':'vm', 'type':'@VM'})); |
| 433 } | 433 } |
| 434 | 434 |
| 435 Future streamListen(String streamId) { | 435 final StreamController<ServiceEvent> events = |
| 436 return invokeRpc('streamListen', {'streamId': streamId}); | 436 new StreamController.broadcast(); |
| 437 } | |
| 438 | 437 |
| 439 Future streamCancel(String streamId) { | 438 void postServiceEvent(Map response, ByteData data) { |
| 440 return invokeRpc('streamCancel', {'streamId': streamId}); | |
| 441 } | |
| 442 | |
| 443 static const kIsolateEventStreamId = 'Isolate'; | |
| 444 static const kDebugEventStreamId = 'Debug'; | |
| 445 static const kGCEventStreamId = 'GC'; | |
| 446 | |
| 447 Map<String,StreamController> _streamControllers = {}; | |
| 448 | |
| 449 void _streamListenHandleError(String streamId) { | |
| 450 streamListen(streamId).catchError((e, st) { | |
| 451 _getEventStreamController(streamId).addError(e, st); | |
| 452 }); | |
| 453 } | |
| 454 | |
| 455 void _streamCancelHandleError(String streamId) { | |
| 456 // TODO(turnidge): Consider removing the controller from the map here. | |
| 457 streamCancel(streamId).catchError((e, st) { | |
| 458 _getEventStreamController(streamId).addError(e, st); | |
| 459 }); | |
| 460 } | |
| 461 | |
| 462 StreamController _getEventStreamController(String streamId) { | |
| 463 var controller = _streamControllers.putIfAbsent( | |
| 464 streamId, () { | |
| 465 return new StreamController.broadcast( | |
| 466 onListen: () => _streamListenHandleError(streamId), | |
| 467 onCancel: () => _streamCancelHandleError(streamId)); | |
| 468 }); | |
| 469 return controller; | |
| 470 } | |
| 471 | |
| 472 Stream getEventStream(String streamId) { | |
| 473 return _getEventStreamController(streamId).stream; | |
| 474 } | |
| 475 | |
| 476 Stream get isolateEvents => getEventStream(kIsolateEventStreamId); | |
| 477 Stream get debugEvents => getEventStream(kDebugEventStreamId); | |
| 478 Stream get gcEvents => getEventStream(kGCEventStreamId); | |
| 479 | |
| 480 void postServiceEvent(String streamId, Map response, ByteData data) { | |
| 481 assert(streamId != null); | |
| 482 var map = toObservable(response); | 439 var map = toObservable(response); |
| 483 assert(!map.containsKey('_data')); | 440 assert(!map.containsKey('_data')); |
| 484 if (data != null) { | 441 if (data != null) { |
| 485 map['_data'] = data; | 442 map['_data'] = data; |
| 486 } | 443 } |
| 487 if (map['type'] != 'ServiceEvent') { | 444 if (map['type'] != 'ServiceEvent') { |
| 488 Logger.root.severe( | 445 Logger.root.severe( |
| 489 "Expected 'ServiceEvent' but found '${map['type']}'"); | 446 "Expected 'ServiceEvent' but found '${map['type']}'"); |
| 490 return; | 447 return; |
| 491 } | 448 } |
| 492 | 449 |
| 493 var eventIsolate = map['isolate']; | 450 var eventIsolate = map['isolate']; |
| 494 var event; | |
| 495 if (eventIsolate == null) { | 451 if (eventIsolate == null) { |
| 496 event = new ServiceObject._fromMap(vm, map); | 452 var event = new ServiceObject._fromMap(vm, map); |
| 453 events.add(event); |
| 497 } else { | 454 } else { |
| 498 // getFromMap creates the Isolate if it hasn't been seen already. | 455 // getFromMap creates the Isolate if it hasn't been seen already. |
| 499 var isolate = getFromMap(map['isolate']); | 456 var isolate = getFromMap(map['isolate']); |
| 500 event = new ServiceObject._fromMap(isolate, map); | 457 var event = new ServiceObject._fromMap(isolate, map); |
| 501 if (event.eventType == ServiceEvent.kIsolateExit) { | 458 if (event.eventType == ServiceEvent.kIsolateExit) { |
| 502 _removeIsolate(isolate.id); | 459 _removeIsolate(isolate.id); |
| 503 } | 460 } |
| 504 // Give the isolate a chance to process the event first before | |
| 505 // dispatching it to others. | |
| 506 isolate._onEvent(event); | 461 isolate._onEvent(event); |
| 462 events.add(event); |
| 507 } | 463 } |
| 508 _getEventStreamController(streamId).add(event); | |
| 509 } | 464 } |
| 510 | 465 |
| 511 void _removeIsolate(String isolateId) { | 466 void _removeIsolate(String isolateId) { |
| 512 assert(_isolateCache.containsKey(isolateId)); | 467 assert(_isolateCache.containsKey(isolateId)); |
| 513 _isolateCache.remove(isolateId); | 468 _isolateCache.remove(isolateId); |
| 514 notifyPropertyChange(#isolates, true, false); | 469 notifyPropertyChange(#isolates, true, false); |
| 515 } | 470 } |
| 516 | 471 |
| 517 void _removeDeadIsolates(List newIsolates) { | 472 void _removeDeadIsolates(List newIsolates) { |
| 518 // Build a set of new isolates. | 473 // Build a set of new isolates. |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1055 latestSnapshot.graph.process(_snapshotFetch).then((graph) { | 1010 latestSnapshot.graph.process(_snapshotFetch).then((graph) { |
| 1056 _snapshotFetch.add(latestSnapshot); | 1011 _snapshotFetch.add(latestSnapshot); |
| 1057 _snapshotFetch.close(); | 1012 _snapshotFetch.close(); |
| 1058 }); | 1013 }); |
| 1059 } | 1014 } |
| 1060 } | 1015 } |
| 1061 | 1016 |
| 1062 Stream fetchHeapSnapshot() { | 1017 Stream fetchHeapSnapshot() { |
| 1063 if (_snapshotFetch == null || _snapshotFetch.isClosed) { | 1018 if (_snapshotFetch == null || _snapshotFetch.isClosed) { |
| 1064 _snapshotFetch = new StreamController(); | 1019 _snapshotFetch = new StreamController(); |
| 1065 isolate.vm.streamListen('_Graph'); | 1020 // isolate.vm.streamListen('_Graph'); |
| 1066 isolate.invokeRpcNoUpgrade('requestHeapSnapshot', {}); | 1021 isolate.invokeRpcNoUpgrade('requestHeapSnapshot', {}); |
| 1067 } | 1022 } |
| 1068 return _snapshotFetch.stream; | 1023 return _snapshotFetch.stream; |
| 1069 } | 1024 } |
| 1070 | 1025 |
| 1071 void updateHeapsFromMap(ObservableMap map) { | 1026 void updateHeapsFromMap(ObservableMap map) { |
| 1072 newSpace.update(map['new']); | 1027 newSpace.update(map['new']); |
| 1073 oldSpace.update(map['old']); | 1028 oldSpace.update(map['old']); |
| 1074 } | 1029 } |
| 1075 | 1030 |
| (...skipping 2123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3199 var v = list[i]; | 3154 var v = list[i]; |
| 3200 if ((v is ObservableMap) && _isServiceMap(v)) { | 3155 if ((v is ObservableMap) && _isServiceMap(v)) { |
| 3201 list[i] = owner.getFromMap(v); | 3156 list[i] = owner.getFromMap(v); |
| 3202 } else if (v is ObservableList) { | 3157 } else if (v is ObservableList) { |
| 3203 _upgradeObservableList(v, owner); | 3158 _upgradeObservableList(v, owner); |
| 3204 } else if (v is ObservableMap) { | 3159 } else if (v is ObservableMap) { |
| 3205 _upgradeObservableMap(v, owner); | 3160 _upgradeObservableMap(v, owner); |
| 3206 } | 3161 } |
| 3207 } | 3162 } |
| 3208 } | 3163 } |
| OLD | NEW |