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

Side by Side Diff: runtime/observatory/lib/src/service/object.dart

Issue 1162133002: Introduce Instance.kind. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: regis feedback Created 5 years, 6 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
OLDNEW
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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 String _id; 94 String _id;
95 95
96 /// The user-level type of this object. 96 /// The user-level type of this object.
97 @reflectable String get type => _type; 97 @reflectable String get type => _type;
98 String _type; 98 String _type;
99 99
100 /// The vm type of this object. 100 /// The vm type of this object.
101 @reflectable String get vmType => _vmType; 101 @reflectable String get vmType => _vmType;
102 String _vmType; 102 String _vmType;
103 103
104 static bool _isInstanceType(String type) {
105 switch (type) {
106 case 'BoundedType':
107 case 'Instance':
108 case 'List':
109 case 'String':
110 case 'Type':
111 case 'TypeParameter':
112 case 'TypeRef':
113 case 'bool':
114 case 'double':
115 case 'int':
116 case 'null':
117 return true;
118 default:
119 return false;
120 }
121 }
122
123 static bool _isTypeType(String type) {
124 switch (type) {
125 case 'BoundedType':
126 case 'Type':
127 case 'TypeParameter':
128 case 'TypeRef':
129 return true;
130 default:
131 return false;
132 }
133 }
134
135 bool get isAbstractType => _isTypeType(type);
136 bool get isBool => type == 'bool';
137 bool get isContext => type == 'Context'; 104 bool get isContext => type == 'Context';
138 bool get isDouble => type == 'double';
139 bool get isError => type == 'Error'; 105 bool get isError => type == 'Error';
140 bool get isInstance => _isInstanceType(type); 106 bool get isInstance => type == 'Instance';
141 bool get isInt => type == 'int';
142 bool get isList => type == 'List';
143 bool get isNull => type == 'null';
144 bool get isSentinel => type == 'Sentinel'; 107 bool get isSentinel => type == 'Sentinel';
145 bool get isString => type == 'String';
146 bool get isMessage => type == 'Message'; 108 bool get isMessage => type == 'Message';
147 109
148 // Kinds of Instance. 110 // Kinds of Instance.
149 bool get isMirrorReference => vmType == 'MirrorReference'; 111 bool get isAbstractType => false;
150 bool get isWeakProperty => vmType == 'WeakProperty'; 112 bool get isNull => false;
113 bool get isBool => false;
114 bool get isDouble => false;
115 bool get isString => false;
116 bool get isInt => false;
117 bool get isList => false;
118 bool get isMirrorReference => false;
119 bool get isWeakProperty => false;
151 bool get isClosure => false; 120 bool get isClosure => false;
152 bool get isPlainInstance { 121 bool get isPlainInstance => false;
153 return (type == 'Instance' &&
154 !isMirrorReference && !isWeakProperty && !isClosure);
155 }
156 122
157 /// Has this object been fully loaded? 123 /// Has this object been fully loaded?
158 bool get loaded => _loaded; 124 bool get loaded => _loaded;
159 bool _loaded = false; 125 bool _loaded = false;
160 // TODO(turnidge): Make loaded observable and get rid of loading 126 // TODO(turnidge): Make loaded observable and get rid of loading
161 // from Isolate. 127 // from Isolate.
162 128
163 /// Is this object cacheable? That is, is it impossible for the [id] 129 /// Is this object cacheable? That is, is it impossible for the [id]
164 /// of this object to change? 130 /// of this object to change?
165 bool get canCache => false; 131 bool get canCache => false;
(...skipping 11 matching lines...) Expand all
177 factory ServiceObject._fromMap(ServiceObjectOwner owner, 143 factory ServiceObject._fromMap(ServiceObjectOwner owner,
178 ObservableMap map) { 144 ObservableMap map) {
179 if (map == null) { 145 if (map == null) {
180 return null; 146 return null;
181 } 147 }
182 if (!_isServiceMap(map)) { 148 if (!_isServiceMap(map)) {
183 Logger.root.severe('Malformed service object: $map'); 149 Logger.root.severe('Malformed service object: $map');
184 } 150 }
185 assert(_isServiceMap(map)); 151 assert(_isServiceMap(map));
186 var type = _stripRef(map['type']); 152 var type = _stripRef(map['type']);
187 var vmType = map['_vmType'] != null ? _stripRef(map['_vmType']) : type; 153 var vmType = map['_vmType'] != null ? map['_vmType'] : type;
188 var obj = null; 154 var obj = null;
189 assert(type != 'VM'); 155 assert(type != 'VM');
190 switch (type) { 156 switch (type) {
191 case 'Breakpoint': 157 case 'Breakpoint':
192 obj = new Breakpoint._empty(owner); 158 obj = new Breakpoint._empty(owner);
193 break; 159 break;
194 case 'Class': 160 case 'Class':
195 obj = new Class._empty(owner); 161 obj = new Class._empty(owner);
196 break; 162 break;
197 case 'Code': 163 case 'Code':
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 break; 202 break;
237 case 'Event': 203 case 'Event':
238 obj = new ServiceEvent._empty(owner); 204 obj = new ServiceEvent._empty(owner);
239 break; 205 break;
240 case 'Script': 206 case 'Script':
241 obj = new Script._empty(owner); 207 obj = new Script._empty(owner);
242 break; 208 break;
243 case 'Socket': 209 case 'Socket':
244 obj = new Socket._empty(owner); 210 obj = new Socket._empty(owner);
245 break; 211 break;
212 case 'Instance':
213 case 'Sentinel': // TODO(rmacnak): Separate this out.
214 obj = new Instance._empty(owner);
215 break;
246 default: 216 default:
247 if (_isInstanceType(type) ||
248 type == 'Sentinel') { // TODO(rmacnak): Separate this out.
249 obj = new Instance._empty(owner);
250 }
251 break; 217 break;
252 } 218 }
253 if (obj == null) { 219 if (obj == null) {
254 obj = new ServiceMap._empty(owner); 220 obj = new ServiceMap._empty(owner);
255 } 221 }
256 obj.update(map); 222 obj.update(map);
257 return obj; 223 return obj;
258 } 224 }
259 225
260 /// If [this] was created from a reference, load the full object 226 /// If [this] was created from a reference, load the full object
(...skipping 1541 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 } 1768 }
1803 1769
1804 Future<ServiceObject> evaluate(String expression) { 1770 Future<ServiceObject> evaluate(String expression) {
1805 return isolate._eval(this, expression); 1771 return isolate._eval(this, expression);
1806 } 1772 }
1807 1773
1808 String toString() => 'Class($vmName)'; 1774 String toString() => 'Class($vmName)';
1809 } 1775 }
1810 1776
1811 class Instance extends ServiceObject { 1777 class Instance extends ServiceObject {
1778 @observable String kind;
1812 @observable Class clazz; 1779 @observable Class clazz;
1813 @observable int size; 1780 @observable int size;
1814 @observable int retainedSize; 1781 @observable int retainedSize;
1815 @observable String valueAsString; // If primitive. 1782 @observable String valueAsString; // If primitive.
1816 @observable bool valueAsStringIsTruncated; 1783 @observable bool valueAsStringIsTruncated;
1817 @observable ServiceFunction function; // If a closure. 1784 @observable ServiceFunction function; // If a closure.
1818 @observable Context context; // If a closure. 1785 @observable Context context; // If a closure.
1819 @observable String name; // If a Type. 1786 @observable String name; // If a Type.
1820 @observable int length; // If a List. 1787 @observable int length; // If a List.
1821 1788
1822 @observable var typeClass; 1789 @observable var typeClass;
1823 @observable var fields; 1790 @observable var fields;
1824 @observable var nativeFields; 1791 @observable var nativeFields;
1825 @observable var elements; 1792 @observable var elements;
1826 @observable var userName;
1827 @observable var referent; // If a MirrorReference. 1793 @observable var referent; // If a MirrorReference.
1828 @observable Instance key; // If a WeakProperty. 1794 @observable Instance key; // If a WeakProperty.
1829 @observable Instance value; // If a WeakProperty. 1795 @observable Instance value; // If a WeakProperty.
1830 1796
1831 bool get isClosure => function != null; 1797 bool get isAbstractType {
1798 return (kind == 'Type' || kind == 'TypeRef' ||
1799 kind == 'TypeParameter' || kind == 'BoundedType');
1800 }
1801 bool get isNull => kind == 'Null';
1802 bool get isBool => kind == 'Bool';
1803 bool get isDouble => kind == 'Double';
1804 bool get isString => kind == 'String';
1805 bool get isInt => kind == 'Int';
1806 bool get isList => kind == 'List';
1807 bool get isMirrorReference => kind == 'MirrorReference';
1808 bool get isWeakProperty => kind == 'WeakProperty';
1809 bool get isClosure => kind == 'Closure';
1810
1811 // TODO(turnidge): Is this properly backwards compatible when new
1812 // instance kinds are added?
1813 bool get isPlainInstance => kind == 'PlainInstance';
1832 1814
1833 Instance._empty(ServiceObjectOwner owner) : super._empty(owner); 1815 Instance._empty(ServiceObjectOwner owner) : super._empty(owner);
1834 1816
1835 void _update(ObservableMap map, bool mapIsRef) { 1817 void _update(ObservableMap map, bool mapIsRef) {
1836 // Extract full properties. 1818 // Extract full properties.
1837 _upgradeCollection(map, isolate); 1819 _upgradeCollection(map, isolate);
1838 1820
1821 kind = map['kind'];
1839 clazz = map['class']; 1822 clazz = map['class'];
1840 size = map['size']; 1823 size = map['size'];
1841 valueAsString = map['valueAsString']; 1824 valueAsString = map['valueAsString'];
1842 // Coerce absence to false. 1825 // Coerce absence to false.
1843 valueAsStringIsTruncated = map['valueAsStringIsTruncated'] == true; 1826 valueAsStringIsTruncated = map['valueAsStringIsTruncated'] == true;
1844 function = map['function']; 1827 function = map['closureFunction'];
1845 context = map['context']; 1828 context = map['closureContext'];
1846 name = map['name']; 1829 name = map['name'];
1847 length = map['length']; 1830 length = map['length'];
1848 1831
1849 if (mapIsRef) { 1832 if (mapIsRef) {
1850 return; 1833 return;
1851 } 1834 }
1852 1835
1853 nativeFields = map['_nativeFields']; 1836 nativeFields = map['_nativeFields'];
1854 fields = map['fields']; 1837 fields = map['fields'];
1855 elements = map['elements']; 1838 elements = map['elements'];
1856 typeClass = map['type_class']; 1839 typeClass = map['typeClass'];
1857 userName = map['user_name']; 1840 referent = map['mirrorReferent'];
1858 referent = map['referent']; 1841 key = map['propertyKey'];
1859 key = map['key']; 1842 value = map['propertyValue'];
1860 value = map['value'];
1861 1843
1862 // We are fully loaded. 1844 // We are fully loaded.
1863 _loaded = true; 1845 _loaded = true;
1864 } 1846 }
1865 1847
1866 String get shortName { 1848 String get shortName {
1867 if (isClosure) { 1849 if (isClosure) {
1868 return function.qualifiedName; 1850 return function.qualifiedName;
1869 } 1851 }
1870 if (valueAsString != null) { 1852 if (valueAsString != null) {
(...skipping 1303 matching lines...) Expand 10 before | Expand all | Expand 10 after
3174 var v = list[i]; 3156 var v = list[i];
3175 if ((v is ObservableMap) && _isServiceMap(v)) { 3157 if ((v is ObservableMap) && _isServiceMap(v)) {
3176 list[i] = owner.getFromMap(v); 3158 list[i] = owner.getFromMap(v);
3177 } else if (v is ObservableList) { 3159 } else if (v is ObservableList) {
3178 _upgradeObservableList(v, owner); 3160 _upgradeObservableList(v, owner);
3179 } else if (v is ObservableMap) { 3161 } else if (v is ObservableMap) {
3180 _upgradeObservableMap(v, owner); 3162 _upgradeObservableMap(v, owner);
3181 } 3163 }
3182 } 3164 }
3183 } 3165 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/service_ref.dart ('k') | runtime/observatory/tests/service/get_object_rpc_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698