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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 String _id; | 95 String _id; |
96 | 96 |
97 /// The user-level type of this object. | 97 /// The user-level type of this object. |
98 @reflectable String get type => _type; | 98 @reflectable String get type => _type; |
99 String _type; | 99 String _type; |
100 | 100 |
101 /// The vm type of this object. | 101 /// The vm type of this object. |
102 @reflectable String get vmType => _vmType; | 102 @reflectable String get vmType => _vmType; |
103 String _vmType; | 103 String _vmType; |
104 | 104 |
| 105 bool get isICData => vmType == 'ICData'; |
| 106 bool get isInstructions => vmType == 'Instructions'; |
| 107 bool get isObjectPool => vmType == 'ObjectPool'; |
105 bool get isContext => type == 'Context'; | 108 bool get isContext => type == 'Context'; |
106 bool get isError => type == 'Error'; | 109 bool get isError => type == 'Error'; |
107 bool get isInstance => type == 'Instance'; | 110 bool get isInstance => type == 'Instance'; |
108 bool get isSentinel => type == 'Sentinel'; | 111 bool get isSentinel => type == 'Sentinel'; |
109 bool get isMessage => type == 'Message'; | 112 bool get isMessage => type == 'Message'; |
110 | 113 |
111 // Kinds of Instance. | 114 // Kinds of Instance. |
112 bool get isAbstractType => false; | 115 bool get isAbstractType => false; |
113 bool get isNull => false; | 116 bool get isNull => false; |
114 bool get isBool => false; | 117 bool get isBool => false; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 obj = new Library._empty(owner); | 199 obj = new Library._empty(owner); |
197 break; | 200 break; |
198 case 'Message': | 201 case 'Message': |
199 obj = new ServiceMessage._empty(owner); | 202 obj = new ServiceMessage._empty(owner); |
200 break; | 203 break; |
201 case 'SourceLocation': | 204 case 'SourceLocation': |
202 obj = new SourceLocation._empty(owner); | 205 obj = new SourceLocation._empty(owner); |
203 break; | 206 break; |
204 case 'Object': | 207 case 'Object': |
205 switch (vmType) { | 208 switch (vmType) { |
206 case 'PcDescriptors': | 209 case 'ICData': |
207 obj = new PcDescriptors._empty(owner); | 210 obj = new ICData._empty(owner); |
| 211 break; |
| 212 case 'Instructions': |
| 213 obj = new Instructions._empty(owner); |
208 break; | 214 break; |
209 case 'LocalVarDescriptors': | 215 case 'LocalVarDescriptors': |
210 obj = new LocalVarDescriptors._empty(owner); | 216 obj = new LocalVarDescriptors._empty(owner); |
211 break; | 217 break; |
| 218 case 'ObjectPool': |
| 219 obj = new ObjectPool._empty(owner); |
| 220 break; |
| 221 case 'PcDescriptors': |
| 222 obj = new PcDescriptors._empty(owner); |
| 223 break; |
212 case 'TokenStream': | 224 case 'TokenStream': |
213 obj = new TokenStream._empty(owner); | 225 obj = new TokenStream._empty(owner); |
214 break; | 226 break; |
215 } | 227 } |
216 break; | 228 break; |
217 case 'Event': | 229 case 'Event': |
218 obj = new ServiceEvent._empty(owner); | 230 obj = new ServiceEvent._empty(owner); |
219 break; | 231 break; |
220 case 'Script': | 232 case 'Script': |
221 obj = new Script._empty(owner); | 233 obj = new Script._empty(owner); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 | 341 |
330 // Updates internal state from [map]. [map] can be a reference. | 342 // Updates internal state from [map]. [map] can be a reference. |
331 void _update(ObservableMap map, bool mapIsRef); | 343 void _update(ObservableMap map, bool mapIsRef); |
332 | 344 |
333 // Helper that can be passed to .catchError that ignores the error. | 345 // Helper that can be passed to .catchError that ignores the error. |
334 _ignoreError(error, stackTrace) { | 346 _ignoreError(error, stackTrace) { |
335 // do nothing. | 347 // do nothing. |
336 } | 348 } |
337 } | 349 } |
338 | 350 |
| 351 abstract class HeapObject extends ServiceObject { |
| 352 @observable Class clazz; |
| 353 @observable int size; |
| 354 @observable int retainedSize; |
| 355 |
| 356 HeapObject._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 357 } |
| 358 |
339 abstract class Coverage { | 359 abstract class Coverage { |
340 // Following getters and functions will be provided by [ServiceObject]. | 360 // Following getters and functions will be provided by [ServiceObject]. |
341 String get id; | 361 String get id; |
342 Isolate get isolate; | 362 Isolate get isolate; |
343 | 363 |
344 Future refreshCoverage() { | 364 Future refreshCoverage() { |
345 return refreshCallSiteData(); | 365 return refreshCallSiteData(); |
346 } | 366 } |
347 | 367 |
348 /// Default handler for coverage data. | 368 /// Default handler for coverage data. |
(...skipping 1581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1930 bool get isPlainInstance => kind == 'PlainInstance'; | 1950 bool get isPlainInstance => kind == 'PlainInstance'; |
1931 | 1951 |
1932 Instance._empty(ServiceObjectOwner owner) : super._empty(owner); | 1952 Instance._empty(ServiceObjectOwner owner) : super._empty(owner); |
1933 | 1953 |
1934 void _update(ObservableMap map, bool mapIsRef) { | 1954 void _update(ObservableMap map, bool mapIsRef) { |
1935 // Extract full properties. | 1955 // Extract full properties. |
1936 _upgradeCollection(map, isolate); | 1956 _upgradeCollection(map, isolate); |
1937 | 1957 |
1938 kind = map['kind']; | 1958 kind = map['kind']; |
1939 clazz = map['class']; | 1959 clazz = map['class']; |
1940 size = map['size']; | |
1941 valueAsString = map['valueAsString']; | 1960 valueAsString = map['valueAsString']; |
1942 // Coerce absence to false. | 1961 // Coerce absence to false. |
1943 valueAsStringIsTruncated = map['valueAsStringIsTruncated'] == true; | 1962 valueAsStringIsTruncated = map['valueAsStringIsTruncated'] == true; |
1944 function = map['closureFunction']; | 1963 function = map['closureFunction']; |
1945 context = map['closureContext']; | 1964 context = map['closureContext']; |
1946 name = map['name']; | 1965 name = map['name']; |
1947 length = map['length']; | 1966 length = map['length']; |
1948 pattern = map['pattern']; | 1967 pattern = map['pattern']; |
1949 | 1968 |
1950 if (mapIsRef) { | 1969 if (mapIsRef) { |
1951 return; | 1970 return; |
1952 } | 1971 } |
1953 | 1972 |
| 1973 size = map['size']; |
| 1974 |
1954 oneByteFunction = map['_oneByteFunction']; | 1975 oneByteFunction = map['_oneByteFunction']; |
1955 twoByteFunction = map['_twoByteFunction']; | 1976 twoByteFunction = map['_twoByteFunction']; |
1956 externalOneByteFunction = map['_externalOneByteFunction']; | 1977 externalOneByteFunction = map['_externalOneByteFunction']; |
1957 externalTwoByteFunction = map['_externalTwoByteFunction']; | 1978 externalTwoByteFunction = map['_externalTwoByteFunction']; |
1958 | 1979 |
1959 nativeFields = map['_nativeFields']; | 1980 nativeFields = map['_nativeFields']; |
1960 fields = map['fields']; | 1981 fields = map['fields']; |
1961 elements = map['elements']; | 1982 elements = map['elements']; |
1962 associations = map['associations']; | 1983 associations = map['associations']; |
1963 if (map['bytes'] != null) { | 1984 if (map['bytes'] != null) { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2028 @observable var parentContext; | 2049 @observable var parentContext; |
2029 @observable int length; | 2050 @observable int length; |
2030 @observable var variables; | 2051 @observable var variables; |
2031 | 2052 |
2032 Context._empty(ServiceObjectOwner owner) : super._empty(owner); | 2053 Context._empty(ServiceObjectOwner owner) : super._empty(owner); |
2033 | 2054 |
2034 void _update(ObservableMap map, bool mapIsRef) { | 2055 void _update(ObservableMap map, bool mapIsRef) { |
2035 // Extract full properties. | 2056 // Extract full properties. |
2036 _upgradeCollection(map, isolate); | 2057 _upgradeCollection(map, isolate); |
2037 | 2058 |
2038 size = map['size']; | |
2039 length = map['length']; | 2059 length = map['length']; |
2040 parentContext = map['parent']; | 2060 parentContext = map['parent']; |
2041 | 2061 |
2042 if (mapIsRef) { | 2062 if (mapIsRef) { |
2043 return; | 2063 return; |
2044 } | 2064 } |
2045 | 2065 |
| 2066 size = map['size']; |
2046 clazz = map['class']; | 2067 clazz = map['class']; |
2047 variables = map['variables']; | 2068 variables = map['variables']; |
2048 | 2069 |
2049 // We are fully loaded. | 2070 // We are fully loaded. |
2050 _loaded = true; | 2071 _loaded = true; |
2051 } | 2072 } |
2052 | 2073 |
2053 String toString() => 'Context($length)'; | 2074 String toString() => 'Context($length)'; |
2054 } | 2075 } |
2055 | 2076 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2117 @observable Code code; | 2138 @observable Code code; |
2118 @observable Code unoptimizedCode; | 2139 @observable Code unoptimizedCode; |
2119 @observable bool isOptimizable; | 2140 @observable bool isOptimizable; |
2120 @observable bool isInlinable; | 2141 @observable bool isInlinable; |
2121 @observable FunctionKind kind; | 2142 @observable FunctionKind kind; |
2122 @observable int deoptimizations; | 2143 @observable int deoptimizations; |
2123 @observable String qualifiedName; | 2144 @observable String qualifiedName; |
2124 @observable int usageCounter; | 2145 @observable int usageCounter; |
2125 @observable bool isDart; | 2146 @observable bool isDart; |
2126 @observable ProfileFunction profile; | 2147 @observable ProfileFunction profile; |
| 2148 @observable Instance icDataArray; |
2127 | 2149 |
2128 bool get immutable => false; | 2150 bool get immutable => false; |
2129 | 2151 |
2130 ServiceFunction._empty(ServiceObject owner) : super._empty(owner); | 2152 ServiceFunction._empty(ServiceObject owner) : super._empty(owner); |
2131 | 2153 |
2132 void _update(ObservableMap map, bool mapIsRef) { | 2154 void _update(ObservableMap map, bool mapIsRef) { |
2133 name = map['name']; | 2155 name = map['name']; |
2134 vmName = (map.containsKey('vmName') ? map['vmName'] : name); | 2156 vmName = (map.containsKey('vmName') ? map['vmName'] : name); |
2135 | 2157 |
2136 _upgradeCollection(map, isolate); | 2158 _upgradeCollection(map, isolate); |
2137 | 2159 |
2138 dartOwner = map['owner']; | 2160 dartOwner = map['owner']; |
2139 kind = FunctionKind.fromJSON(map['_kind']); | 2161 kind = FunctionKind.fromJSON(map['_kind']); |
2140 isDart = !kind.isSynthetic(); | 2162 isDart = kind.isDart(); |
2141 | 2163 |
2142 if (dartOwner is ServiceFunction) { | 2164 if (dartOwner is ServiceFunction) { |
2143 ServiceFunction ownerFunction = dartOwner; | 2165 ServiceFunction ownerFunction = dartOwner; |
2144 library = ownerFunction.library; | 2166 library = ownerFunction.library; |
2145 qualifiedName = "${ownerFunction.qualifiedName}.${name}"; | 2167 qualifiedName = "${ownerFunction.qualifiedName}.${name}"; |
2146 | 2168 |
2147 } else if (dartOwner is Class) { | 2169 } else if (dartOwner is Class) { |
2148 Class ownerClass = dartOwner; | 2170 Class ownerClass = dartOwner; |
2149 library = ownerClass.library; | 2171 library = ownerClass.library; |
2150 qualifiedName = "${ownerClass.name}.${name}"; | 2172 qualifiedName = "${ownerClass.name}.${name}"; |
(...skipping 10 matching lines...) Expand all Loading... |
2161 _loaded = true; | 2183 _loaded = true; |
2162 isStatic = map['static']; | 2184 isStatic = map['static']; |
2163 isConst = map['const']; | 2185 isConst = map['const']; |
2164 location = map['location']; | 2186 location = map['location']; |
2165 code = map['code']; | 2187 code = map['code']; |
2166 isOptimizable = map['_optimizable']; | 2188 isOptimizable = map['_optimizable']; |
2167 isInlinable = map['_inlinable']; | 2189 isInlinable = map['_inlinable']; |
2168 unoptimizedCode = map['_unoptimizedCode']; | 2190 unoptimizedCode = map['_unoptimizedCode']; |
2169 deoptimizations = map['_deoptimizations']; | 2191 deoptimizations = map['_deoptimizations']; |
2170 usageCounter = map['_usageCounter']; | 2192 usageCounter = map['_usageCounter']; |
| 2193 icDataArray = map['_icDataArray']; |
2171 } | 2194 } |
2172 } | 2195 } |
2173 | 2196 |
2174 | 2197 |
2175 class Field extends ServiceObject { | 2198 class Field extends ServiceObject { |
2176 // Library or Class. | 2199 // Library or Class. |
2177 @observable ServiceObject dartOwner; | 2200 @observable ServiceObject dartOwner; |
2178 @observable Library library; | 2201 @observable Library library; |
2179 @observable Instance declaredType; | 2202 @observable Instance declaredType; |
2180 @observable bool isStatic; | 2203 @observable bool isStatic; |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2755 var beginPos = descriptor['beginPos']; | 2778 var beginPos = descriptor['beginPos']; |
2756 var endPos = descriptor['endPos']; | 2779 var endPos = descriptor['endPos']; |
2757 var scopeId = descriptor['scopeId']; | 2780 var scopeId = descriptor['scopeId']; |
2758 var kind = descriptor['kind'].trim(); | 2781 var kind = descriptor['kind'].trim(); |
2759 descriptors.add( | 2782 descriptors.add( |
2760 new LocalVarDescriptor(name, index, beginPos, endPos, scopeId, kind)); | 2783 new LocalVarDescriptor(name, index, beginPos, endPos, scopeId, kind)); |
2761 } | 2784 } |
2762 } | 2785 } |
2763 } | 2786 } |
2764 | 2787 |
2765 class TokenStream extends ServiceObject { | 2788 class ObjectPool extends HeapObject { |
2766 @observable Class clazz; | 2789 bool get canCache => false; |
2767 @observable int size; | 2790 bool get immutable => false; |
| 2791 |
| 2792 @observable int length; |
| 2793 @observable List entries; |
| 2794 |
| 2795 ObjectPool._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 2796 |
| 2797 void _update(ObservableMap m, bool mapIsRef) { |
| 2798 _upgradeCollection(m, isolate); |
| 2799 clazz = m['class']; |
| 2800 length = m['length']; |
| 2801 if (mapIsRef) { |
| 2802 return; |
| 2803 } |
| 2804 size = m['size']; |
| 2805 entries = m['_entries']; |
| 2806 } |
| 2807 } |
| 2808 |
| 2809 class ICData extends HeapObject { |
| 2810 @observable ServiceObject dartOwner; |
| 2811 @observable String selector; |
| 2812 @observable Instance argumentsDescriptor; |
| 2813 @observable Instance entries; |
| 2814 |
| 2815 bool get canCache => false; |
| 2816 bool get immutable => false; |
| 2817 |
| 2818 ICData._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 2819 |
| 2820 void _update(ObservableMap m, bool mapIsRef) { |
| 2821 _upgradeCollection(m, isolate); |
| 2822 clazz = m['class']; |
| 2823 dartOwner = m['_owner']; |
| 2824 selector = m['_selector']; |
| 2825 if (mapIsRef) { |
| 2826 return; |
| 2827 } |
| 2828 size = m['size']; |
| 2829 argumentsDescriptor = m['_argumentsDescriptor']; |
| 2830 entries = m['_entries']; |
| 2831 } |
| 2832 } |
| 2833 |
| 2834 class Instructions extends HeapObject { |
2768 bool get canCache => false; | 2835 bool get canCache => false; |
2769 bool get immutable => true; | 2836 bool get immutable => true; |
2770 | 2837 |
| 2838 @observable Code code; |
| 2839 @observable ObjectPool objectPool; |
| 2840 |
| 2841 Instructions._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 2842 |
| 2843 void _update(ObservableMap m, bool mapIsRef) { |
| 2844 _upgradeCollection(m, isolate); |
| 2845 clazz = m['class']; |
| 2846 code = m['_code']; |
| 2847 if (mapIsRef) { |
| 2848 return; |
| 2849 } |
| 2850 size = m['size']; |
| 2851 objectPool = m['_objectPool']; |
| 2852 } |
| 2853 } |
| 2854 |
| 2855 class TokenStream extends HeapObject { |
| 2856 bool get canCache => false; |
| 2857 bool get immutable => true; |
| 2858 |
2771 @observable String privateKey; | 2859 @observable String privateKey; |
2772 | 2860 |
2773 TokenStream._empty(ServiceObjectOwner owner) : super._empty(owner); | 2861 TokenStream._empty(ServiceObjectOwner owner) : super._empty(owner); |
2774 | 2862 |
2775 void _update(ObservableMap m, bool mapIsRef) { | 2863 void _update(ObservableMap m, bool mapIsRef) { |
2776 if (mapIsRef) { | 2864 if (mapIsRef) { |
2777 return; | 2865 return; |
2778 } | 2866 } |
2779 _upgradeCollection(m, isolate); | 2867 _upgradeCollection(m, isolate); |
2780 clazz = m['class']; | 2868 clazz = m['class']; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2863 } | 2951 } |
2864 | 2952 |
2865 class CodeInlineInterval { | 2953 class CodeInlineInterval { |
2866 final int start; | 2954 final int start; |
2867 final int end; | 2955 final int end; |
2868 final List<ServiceFunction> functions = new List<ServiceFunction>(); | 2956 final List<ServiceFunction> functions = new List<ServiceFunction>(); |
2869 bool contains(int pc) => (pc >= start) && (pc < end); | 2957 bool contains(int pc) => (pc >= start) && (pc < end); |
2870 CodeInlineInterval(this.start, this.end); | 2958 CodeInlineInterval(this.start, this.end); |
2871 } | 2959 } |
2872 | 2960 |
2873 class Code extends ServiceObject { | 2961 class Code extends HeapObject { |
2874 @observable CodeKind kind; | 2962 @observable CodeKind kind; |
2875 @observable ServiceObject objectPool; | 2963 @observable ServiceObject objectPool; |
2876 @observable ServiceFunction function; | 2964 @observable ServiceFunction function; |
2877 @observable Script script; | 2965 @observable Script script; |
2878 @observable bool isOptimized = false; | 2966 @observable bool isOptimized = false; |
2879 @reflectable int startAddress = 0; | 2967 @reflectable int startAddress = 0; |
2880 @reflectable int endAddress = 0; | 2968 @reflectable int endAddress = 0; |
2881 @reflectable final instructions = new ObservableList<CodeInstruction>(); | 2969 @reflectable final instructions = new ObservableList<CodeInstruction>(); |
2882 List<CodeInstruction> instructionsByAddressOffset; | 2970 List<CodeInstruction> instructionsByAddressOffset; |
2883 | 2971 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2942 | 3030 |
2943 void _update(ObservableMap m, bool mapIsRef) { | 3031 void _update(ObservableMap m, bool mapIsRef) { |
2944 name = m['name']; | 3032 name = m['name']; |
2945 vmName = (m.containsKey('vmName') ? m['vmName'] : name); | 3033 vmName = (m.containsKey('vmName') ? m['vmName'] : name); |
2946 isOptimized = m['_optimized']; | 3034 isOptimized = m['_optimized']; |
2947 kind = CodeKind.fromString(m['kind']); | 3035 kind = CodeKind.fromString(m['kind']); |
2948 if (mapIsRef) { | 3036 if (mapIsRef) { |
2949 return; | 3037 return; |
2950 } | 3038 } |
2951 _loaded = true; | 3039 _loaded = true; |
| 3040 size = m['size']; |
2952 startAddress = int.parse(m['_startAddress'], radix:16); | 3041 startAddress = int.parse(m['_startAddress'], radix:16); |
2953 endAddress = int.parse(m['_endAddress'], radix:16); | 3042 endAddress = int.parse(m['_endAddress'], radix:16); |
2954 function = isolate.getFromMap(m['function']); | 3043 function = isolate.getFromMap(m['function']); |
2955 objectPool = isolate.getFromMap(m['_objectPool']); | 3044 objectPool = isolate.getFromMap(m['_objectPool']); |
2956 var disassembly = m['_disassembly']; | 3045 var disassembly = m['_disassembly']; |
2957 if (disassembly != null) { | 3046 if (disassembly != null) { |
2958 _processDisassembly(disassembly); | 3047 _processDisassembly(disassembly); |
2959 } | 3048 } |
2960 var descriptors = m['_descriptors']; | 3049 var descriptors = m['_descriptors']; |
2961 if (descriptors != null) { | 3050 if (descriptors != null) { |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3364 var v = list[i]; | 3453 var v = list[i]; |
3365 if ((v is ObservableMap) && _isServiceMap(v)) { | 3454 if ((v is ObservableMap) && _isServiceMap(v)) { |
3366 list[i] = owner.getFromMap(v); | 3455 list[i] = owner.getFromMap(v); |
3367 } else if (v is ObservableList) { | 3456 } else if (v is ObservableList) { |
3368 _upgradeObservableList(v, owner); | 3457 _upgradeObservableList(v, owner); |
3369 } else if (v is ObservableMap) { | 3458 } else if (v is ObservableMap) { |
3370 _upgradeObservableMap(v, owner); | 3459 _upgradeObservableMap(v, owner); |
3371 } | 3460 } |
3372 } | 3461 } |
3373 } | 3462 } |
OLD | NEW |