Chromium Code Reviews| Index: runtime/observatory/lib/src/service/object.dart |
| diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart |
| index e54bdb9da2385eb3a2d114dcdc7de2bb8981d963..1e5724e07e9f84929cee40704b498b9397292ac0 100644 |
| --- a/runtime/observatory/lib/src/service/object.dart |
| +++ b/runtime/observatory/lib/src/service/object.dart |
| @@ -640,14 +640,16 @@ abstract class VM extends ServiceObjectOwner { |
| @observable int pid = 0; |
| @observable DateTime startTime; |
| @observable DateTime refreshTime; |
| - @observable Duration get upTime => |
| - (new DateTime.now().difference(startTime)); |
| + @observable Duration get upTime { |
| + if (startTime == null) { |
| + return null; |
| + } |
| + return (new DateTime.now().difference(startTime)); |
| + } |
| + @observable String get nameAndAddress => '${name}@${target.networkAddress}'; |
| VM() : super._empty(null) { |
| - name = 'vm'; |
| - vmName = 'vm'; |
| - _cache['vm'] = this; |
| - update(toObservable({'id':'vm', 'type':'@VM'})); |
| + update(toObservable({'name':'vm', 'type':'@VM'})); |
| } |
| void postServiceEvent(String streamId, Map response, ByteData data) { |
| @@ -733,6 +735,14 @@ abstract class VM extends ServiceObjectOwner { |
| if (map == null) { |
| return null; |
| } |
| + var type = _stripRef(map['type']); |
| + if (type == 'VM') { |
| + // Update this VM object. |
| + update(map); |
| + return this; |
| + } |
| + |
| + assert(type == 'Isolate'); |
| String id = map['id']; |
| if (!id.startsWith(_isolateIdPrefix)) { |
| // Currently the VM only supports upgrading Isolate ServiceObjects. |
| @@ -816,6 +826,7 @@ abstract class VM extends ServiceObjectOwner { |
| if (!loaded) { |
| // The vm service relies on these events to keep the VM and |
| // Isolate types up to date. |
| + await listenEventStream(kVMStream, _dispatchEventToIsolate); |
| await listenEventStream(kIsolateStream, _dispatchEventToIsolate); |
| await listenEventStream(kDebugStream, _dispatchEventToIsolate); |
| await listenEventStream(_kGraphStream, _dispatchEventToIsolate); |
| @@ -823,6 +834,10 @@ abstract class VM extends ServiceObjectOwner { |
| return await invokeRpcNoUpgrade('getVM', {}); |
| } |
| + Future setName(String newName) { |
| + return invokeRpc('setVMName', { 'name': newName }); |
| + } |
| + |
| Future<ServiceObject> getFlagList() { |
| return invokeRpc('getFlagList', {}); |
| } |
| @@ -845,6 +860,7 @@ abstract class VM extends ServiceObjectOwner { |
| Map<String,_EventStreamState> _eventStreams = {}; |
| // Well-known stream ids. |
| + static const kVMStream = 'VM'; |
| static const kIsolateStream = 'Isolate'; |
| static const kDebugStream = 'Debug'; |
| static const kGCStream = 'GC'; |
| @@ -875,6 +891,9 @@ abstract class VM extends ServiceObjectOwner { |
| Future get onDisconnect; |
| void _update(ObservableMap map, bool mapIsRef) { |
| + name = map['name']; |
| + notifyPropertyChange(#nameAndAddress, 0, 1); |
| + vmName = map.containsKey('_vmName') ? map['_vmName'] : name; |
| if (mapIsRef) { |
| return; |
| } |
| @@ -1111,8 +1130,12 @@ class Isolate extends ServiceObjectOwner with Coverage { |
| @observable int number; |
| @observable int originNumber; |
| @observable DateTime startTime; |
| - @observable Duration get upTime => |
| - (new DateTime.now().difference(startTime)); |
| + @observable Duration get upTime { |
| + if (startTime == null) { |
| + return null; |
| + } |
| + return (new DateTime.now().difference(startTime)); |
| + } |
| @observable ObservableMap counters = new ObservableMap(); |
| @@ -1341,7 +1364,7 @@ class Isolate extends ServiceObjectOwner with Coverage { |
| void _update(ObservableMap map, bool mapIsRef) { |
| name = map['name']; |
| - vmName = map['name']; |
| + vmName = map.containsKey('_vmName') ? map['_vmName'] : name; |
|
Cutch
2015/10/08 20:05:27
Why are we looking for the _vmName in the Isolate'
turnidge
2015/10/08 22:15:26
Resolved offline. This is not "the name of the vm
|
| number = int.parse(map['number'], onError:(_) => null); |
| if (mapIsRef) { |
| return; |
| @@ -1485,8 +1508,8 @@ class Isolate extends ServiceObjectOwner with Coverage { |
| break; |
| default: |
| - // Log unrecognized events. |
| - Logger.root.severe('Unrecognized event: $event'); |
| + // Log unexpected events. |
| + Logger.root.severe('Unexpected event: $event'); |
| break; |
| } |
| } |
| @@ -1836,6 +1859,7 @@ Level _findLogLevel(int value) { |
| /// A [ServiceEvent] is an asynchronous event notification from the vm. |
| class ServiceEvent extends ServiceObject { |
| /// The possible 'kind' values. |
| + static const kVMUpdate = 'VMUpdate'; |
| static const kIsolateStart = 'IsolateStart'; |
| static const kIsolateRunnable = 'IsolateRunnable'; |
| static const kIsolateExit = 'IsolateExit'; |
| @@ -1953,11 +1977,12 @@ class ServiceEvent extends ServiceObject { |
| } |
| String toString() { |
| + var ownerName = owner.id != null ? owner.id.toString() : owner.name; |
| if (data == null) { |
| - return "ServiceEvent(owner='${owner.id}', kind='${kind}', " |
| + return "ServiceEvent(owner='${ownerName}', kind='${kind}', " |
| "time=${timestamp})"; |
| } else { |
| - return "ServiceEvent(owner='${owner.id}', kind='${kind}', " |
| + return "ServiceEvent(owner='${ownerName}', kind='${kind}', " |
| "data.lengthInBytes=${data.lengthInBytes}, time=${timestamp})"; |
| } |
| } |