Chromium Code Reviews| 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 /// A [ServiceObject] is an object known to the VM service and is tied | 7 /// A [ServiceObject] is an object known to the VM service and is tied |
| 8 /// to an owning [Isolate]. | 8 /// to an owning [Isolate]. |
| 9 abstract class ServiceObject extends Observable { | 9 abstract class ServiceObject extends Observable { |
| 10 static int LexicalSortName(ServiceObject o1, ServiceObject o2) { | 10 static int LexicalSortName(ServiceObject o1, ServiceObject o2) { |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 27 @reflectable Isolate get isolate => _owner.isolate; | 27 @reflectable Isolate get isolate => _owner.isolate; |
| 28 | 28 |
| 29 /// The id of this object. | 29 /// The id of this object. |
| 30 @reflectable String get id => _id; | 30 @reflectable String get id => _id; |
| 31 String _id; | 31 String _id; |
| 32 | 32 |
| 33 /// The service type of this object. | 33 /// The service type of this object. |
| 34 @reflectable String get serviceType => _serviceType; | 34 @reflectable String get serviceType => _serviceType; |
| 35 String _serviceType; | 35 String _serviceType; |
| 36 | 36 |
| 37 bool get isBool => serviceType == 'Bool'; | |
| 38 bool get isDouble => serviceType == 'Double'; | |
| 39 bool get isError => serviceType == 'Error'; | |
| 40 bool get isInstance => serviceType == 'Instance'; | |
| 41 bool get isInt => serviceType == 'Smi' || serviceType == 'Mint' || serviceType == 'Bigint'; | |
| 42 bool get isList => serviceType == 'GrowableObjectArray' || serviceType == 'Arr ay'; | |
| 43 bool get isNull => serviceType == 'Null' && id == 'objects/null'; | |
| 44 bool get isPsuedoNull => serviceType == 'Null' && id != 'objects/null'; | |
| 45 bool get isString => serviceType == 'String'; | |
| 46 bool get isType => serviceType == 'Type'; | |
|
Cutch
2014/08/28 14:46:05
Should these be on Instance and not ServiceObject?
rmacnak
2014/08/28 19:41:05
I think it makes sense to ask these questions of a
| |
| 47 | |
| 37 /// The complete service url of this object. | 48 /// The complete service url of this object. |
| 38 @reflectable String get link => _owner.relativeLink(_id); | 49 @reflectable String get link => _owner.relativeLink(_id); |
| 39 | 50 |
| 40 /// Has this object been fully loaded? | 51 /// Has this object been fully loaded? |
| 41 bool get loaded => _loaded; | 52 bool get loaded => _loaded; |
| 42 bool _loaded = false; | 53 bool _loaded = false; |
| 43 // TODO(turnidge): Make loaded observable and get rid of loading | 54 // TODO(turnidge): Make loaded observable and get rid of loading |
| 44 // from Isolate. | 55 // from Isolate. |
| 45 | 56 |
| 46 /// Is this object cacheable? That is, is it impossible for the [id] | 57 /// Is this object cacheable? That is, is it impossible for the [id] |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 75 break; | 86 break; |
| 76 case 'Code': | 87 case 'Code': |
| 77 obj = new Code._empty(owner); | 88 obj = new Code._empty(owner); |
| 78 break; | 89 break; |
| 79 case 'Error': | 90 case 'Error': |
| 80 obj = new DartError._empty(owner); | 91 obj = new DartError._empty(owner); |
| 81 break; | 92 break; |
| 82 case 'Function': | 93 case 'Function': |
| 83 obj = new ServiceFunction._empty(owner); | 94 obj = new ServiceFunction._empty(owner); |
| 84 break; | 95 break; |
| 96 case 'Array': | |
| 97 case 'Bigint': | |
| 98 case 'Bool': | |
| 99 case 'Double': | |
| 100 case 'GrowableObjectArray': | |
| 101 case 'Instance': | |
| 102 case 'Mint': | |
| 103 case 'Null': | |
| 104 case 'Smi': | |
| 105 case 'String': | |
| 106 case 'Type': | |
| 107 obj = new Instance._empty(owner); | |
| 108 break; | |
| 85 case 'Isolate': | 109 case 'Isolate': |
| 86 obj = new Isolate._empty(owner.vm); | 110 obj = new Isolate._empty(owner.vm); |
| 87 break; | 111 break; |
| 88 case 'Library': | 112 case 'Library': |
| 89 obj = new Library._empty(owner); | 113 obj = new Library._empty(owner); |
| 90 break; | 114 break; |
| 91 case 'ServiceError': | 115 case 'ServiceError': |
| 92 obj = new ServiceError._empty(owner); | 116 obj = new ServiceError._empty(owner); |
| 93 break; | 117 break; |
| 94 case 'ServiceEvent': | 118 case 'ServiceEvent': |
| (...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1108 | 1132 |
| 1109 String toString() => "ServiceMap($_map)"; | 1133 String toString() => "ServiceMap($_map)"; |
| 1110 } | 1134 } |
| 1111 | 1135 |
| 1112 /// A [DartError] is peered to a Dart Error object. | 1136 /// A [DartError] is peered to a Dart Error object. |
| 1113 class DartError extends ServiceObject { | 1137 class DartError extends ServiceObject { |
| 1114 DartError._empty(ServiceObject owner) : super._empty(owner); | 1138 DartError._empty(ServiceObject owner) : super._empty(owner); |
| 1115 | 1139 |
| 1116 @observable String kind; | 1140 @observable String kind; |
| 1117 @observable String message; | 1141 @observable String message; |
| 1118 @observable ServiceMap exception; | 1142 @observable Instance exception; |
| 1119 @observable ServiceMap stacktrace; | 1143 @observable ServiceMap stacktrace; |
| 1120 | 1144 |
| 1121 void _update(ObservableMap map, bool mapIsRef) { | 1145 void _update(ObservableMap map, bool mapIsRef) { |
| 1122 kind = map['kind']; | 1146 kind = map['kind']; |
| 1123 message = map['message']; | 1147 message = map['message']; |
| 1124 exception = new ServiceObject._fromMap(owner, map['exception']); | 1148 exception = new ServiceObject._fromMap(owner, map['exception']); |
| 1125 stacktrace = new ServiceObject._fromMap(owner, map['stacktrace']); | 1149 stacktrace = new ServiceObject._fromMap(owner, map['stacktrace']); |
| 1126 name = 'DartError $kind'; | 1150 name = 'DartError $kind'; |
| 1127 vmName = name; | 1151 vmName = name; |
| 1128 } | 1152 } |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1388 subclasses.sort(ServiceObject.LexicalSortName); | 1412 subclasses.sort(ServiceObject.LexicalSortName); |
| 1389 } | 1413 } |
| 1390 | 1414 |
| 1391 Future<ServiceObject> get(String command) { | 1415 Future<ServiceObject> get(String command) { |
| 1392 return isolate.get(id + "/$command"); | 1416 return isolate.get(id + "/$command"); |
| 1393 } | 1417 } |
| 1394 | 1418 |
| 1395 String toString() => 'Class($vmName)'; | 1419 String toString() => 'Class($vmName)'; |
| 1396 } | 1420 } |
| 1397 | 1421 |
| 1422 class Instance extends ServiceObject { | |
| 1423 @observable Class clazz; | |
| 1424 @observable String valueAsString; | |
| 1425 @observable int size; | |
| 1426 @observable ServiceFunction closureFunc; // If a closure. | |
| 1427 @observable String name; // If a Type. | |
| 1428 | |
| 1429 @observable var type_class; | |
|
Cutch
2014/08/28 14:46:05
typeClass
rmacnak
2014/08/28 19:41:05
Fixed
| |
| 1430 @observable var length; | |
| 1431 @observable var fields; | |
| 1432 @observable var nativeFields; | |
| 1433 @observable var elements; | |
| 1434 @observable var user_name; | |
|
Cutch
2014/08/28 14:46:05
userName
rmacnak
2014/08/28 19:41:05
Fixed
| |
| 1435 | |
| 1436 bool get isClosure => closureFunc != null; | |
| 1437 | |
| 1438 Instance._empty(ServiceObjectOwner owner) : super._empty(owner); | |
| 1439 | |
| 1440 void _update(ObservableMap map, bool mapIsRef) { | |
| 1441 // Extract full properties. | |
| 1442 _upgradeCollection(map, isolate); | |
| 1443 | |
| 1444 clazz = map['class']; | |
| 1445 valueAsString = map['valueAsString']; | |
| 1446 size = map['size']; | |
| 1447 closureFunc = map['closureFunc']; | |
| 1448 name = map['name']; | |
| 1449 | |
| 1450 if (mapIsRef) { | |
| 1451 return; | |
| 1452 } | |
| 1453 | |
| 1454 nativeFields = map['nativeFields']; | |
| 1455 fields = map['fields']; | |
| 1456 length = map['length']; | |
| 1457 elements = map['elements']; | |
| 1458 type_class = map['type_class']; | |
| 1459 user_name = map['user_name']; | |
| 1460 | |
| 1461 // We are fully loaded. | |
| 1462 _loaded = true; | |
| 1463 } | |
| 1464 | |
| 1465 String get shortName => valueAsString != null ? valueAsString : 'a ${clazz.nam e}'; | |
| 1466 | |
| 1467 String toString() => 'Instance($shortName)'; | |
| 1468 } | |
| 1469 | |
| 1398 // TODO(koda): Sync this with VM. | 1470 // TODO(koda): Sync this with VM. |
| 1399 class FunctionKind { | 1471 class FunctionKind { |
| 1400 final String _strValue; | 1472 final String _strValue; |
| 1401 FunctionKind._internal(this._strValue); | 1473 FunctionKind._internal(this._strValue); |
| 1402 toString() => _strValue; | 1474 toString() => _strValue; |
| 1403 bool isFake() => [kCollected, kNative, kTag, kReused].contains(this); | 1475 bool isFake() => [kCollected, kNative, kTag, kReused].contains(this); |
| 1404 | 1476 |
| 1405 static FunctionKind fromJSON(String value) { | 1477 static FunctionKind fromJSON(String value) { |
| 1406 switch(value) { | 1478 switch(value) { |
| 1407 case 'kRegularFunction': return kRegularFunction; | 1479 case 'kRegularFunction': return kRegularFunction; |
| (...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2214 remoteAddress = map['remoteAddress']; | 2286 remoteAddress = map['remoteAddress']; |
| 2215 remotePort = map['remotePort']; | 2287 remotePort = map['remotePort']; |
| 2216 | 2288 |
| 2217 fd = map['fd']; | 2289 fd = map['fd']; |
| 2218 socketOwner = map['owner']; | 2290 socketOwner = map['owner']; |
| 2219 } | 2291 } |
| 2220 } | 2292 } |
| 2221 | 2293 |
| 2222 // Convert any ServiceMaps representing a null instance into an actual null. | 2294 // Convert any ServiceMaps representing a null instance into an actual null. |
| 2223 _convertNull(obj) { | 2295 _convertNull(obj) { |
| 2224 if (obj is ServiceMap && | 2296 if (obj.isNull) { |
| 2225 obj.serviceType == 'Null') { | |
| 2226 return null; | 2297 return null; |
| 2227 } | 2298 } |
| 2228 return obj; | 2299 return obj; |
| 2229 } | 2300 } |
| 2230 | 2301 |
| 2231 // Returns true if [map] is a service map. i.e. it has the following keys: | 2302 // Returns true if [map] is a service map. i.e. it has the following keys: |
| 2232 // 'id' and a 'type'. | 2303 // 'id' and a 'type'. |
| 2233 bool _isServiceMap(ObservableMap m) { | 2304 bool _isServiceMap(ObservableMap m) { |
| 2234 return (m != null) && (m['id'] != null) && (m['type'] != null); | 2305 return (m != null) && (m['id'] != null) && (m['type'] != null); |
| 2235 } | 2306 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2268 var v = list[i]; | 2339 var v = list[i]; |
| 2269 if ((v is ObservableMap) && _isServiceMap(v)) { | 2340 if ((v is ObservableMap) && _isServiceMap(v)) { |
| 2270 list[i] = owner.getFromMap(v); | 2341 list[i] = owner.getFromMap(v); |
| 2271 } else if (v is ObservableList) { | 2342 } else if (v is ObservableList) { |
| 2272 _upgradeObservableList(v, owner); | 2343 _upgradeObservableList(v, owner); |
| 2273 } else if (v is ObservableMap) { | 2344 } else if (v is ObservableMap) { |
| 2274 _upgradeObservableMap(v, owner); | 2345 _upgradeObservableMap(v, owner); |
| 2275 } | 2346 } |
| 2276 } | 2347 } |
| 2277 } | 2348 } |
| OLD | NEW |