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

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

Issue 1212933003: Observatory improvements for exploring compiled code. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/service_view.dart ('k') | runtime/observatory/observatory_sources.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698