| 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 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 factory ServiceObject._fromMap(ServiceObjectOwner owner, | 116 factory ServiceObject._fromMap(ServiceObjectOwner owner, |
| 117 ObservableMap map) { | 117 ObservableMap map) { |
| 118 if (map == null) { | 118 if (map == null) { |
| 119 return null; | 119 return null; |
| 120 } | 120 } |
| 121 if (!_isServiceMap(map)) { | 121 if (!_isServiceMap(map)) { |
| 122 Logger.root.severe('Malformed service object: $map'); | 122 Logger.root.severe('Malformed service object: $map'); |
| 123 } | 123 } |
| 124 assert(_isServiceMap(map)); | 124 assert(_isServiceMap(map)); |
| 125 var type = _stripRef(map['type']); | 125 var type = _stripRef(map['type']); |
| 126 var vmType = map['_vmType'] != null ? _stripRef(map['_vmType']) : type; |
| 126 var obj = null; | 127 var obj = null; |
| 127 assert(type != 'VM'); | 128 assert(type != 'VM'); |
| 128 switch (type) { | 129 switch (type) { |
| 129 case 'Class': | 130 case 'Class': |
| 130 obj = new Class._empty(owner); | 131 obj = new Class._empty(owner); |
| 131 break; | 132 break; |
| 132 case 'Code': | 133 case 'Code': |
| 133 obj = new Code._empty(owner); | 134 obj = new Code._empty(owner); |
| 134 break; | 135 break; |
| 135 case 'Context': | 136 case 'Context': |
| (...skipping 10 matching lines...) Expand all Loading... |
| 146 break; | 147 break; |
| 147 case 'Gauge': | 148 case 'Gauge': |
| 148 obj = new ServiceMetric._empty(owner); | 149 obj = new ServiceMetric._empty(owner); |
| 149 break; | 150 break; |
| 150 case 'Isolate': | 151 case 'Isolate': |
| 151 obj = new Isolate._empty(owner.vm); | 152 obj = new Isolate._empty(owner.vm); |
| 152 break; | 153 break; |
| 153 case 'Library': | 154 case 'Library': |
| 154 obj = new Library._empty(owner); | 155 obj = new Library._empty(owner); |
| 155 break; | 156 break; |
| 157 case 'Object': |
| 158 switch (vmType) { |
| 159 case 'PcDescriptors': |
| 160 obj = new PcDescriptors._empty(owner); |
| 161 break; |
| 162 case 'LocalVarDescriptors': |
| 163 obj = new LocalVarDescriptors._empty(owner); |
| 164 break; |
| 165 case 'TokenStream': |
| 166 obj = new TokenStream._empty(owner); |
| 167 break; |
| 168 } |
| 169 break; |
| 156 case 'ServiceError': | 170 case 'ServiceError': |
| 157 obj = new ServiceError._empty(owner); | 171 obj = new ServiceError._empty(owner); |
| 158 break; | 172 break; |
| 159 case 'ServiceEvent': | 173 case 'ServiceEvent': |
| 160 obj = new ServiceEvent._empty(owner); | 174 obj = new ServiceEvent._empty(owner); |
| 161 break; | 175 break; |
| 162 case 'ServiceException': | 176 case 'ServiceException': |
| 163 obj = new ServiceException._empty(owner); | 177 obj = new ServiceException._empty(owner); |
| 164 break; | 178 break; |
| 165 case 'Script': | 179 case 'Script': |
| 166 obj = new Script._empty(owner); | 180 obj = new Script._empty(owner); |
| 167 break; | 181 break; |
| 168 case 'Socket': | 182 case 'Socket': |
| 169 obj = new Socket._empty(owner); | 183 obj = new Socket._empty(owner); |
| 170 break; | 184 break; |
| 171 default: | 185 default: |
| 172 if (_isInstanceType(type) || | 186 if (_isInstanceType(type) || |
| 173 type == 'Sentinel') { // TODO(rmacnak): Separate this out. | 187 type == 'Sentinel') { // TODO(rmacnak): Separate this out. |
| 174 obj = new Instance._empty(owner); | 188 obj = new Instance._empty(owner); |
| 175 break; | |
| 176 } else { | |
| 177 obj = new ServiceMap._empty(owner); | |
| 178 break; | |
| 179 } | 189 } |
| 190 break; |
| 191 } |
| 192 if (obj == null) { |
| 193 obj = new ServiceMap._empty(owner); |
| 180 } | 194 } |
| 181 obj.update(map); | 195 obj.update(map); |
| 182 return obj; | 196 return obj; |
| 183 } | 197 } |
| 184 | 198 |
| 185 /// If [this] was created from a reference, load the full object | 199 /// If [this] was created from a reference, load the full object |
| 186 /// from the service by calling [reload]. Else, return [this]. | 200 /// from the service by calling [reload]. Else, return [this]. |
| 187 Future<ServiceObject> load() { | 201 Future<ServiceObject> load() { |
| 188 if (loaded) { | 202 if (loaded) { |
| 189 return new Future.value(this); | 203 return new Future.value(this); |
| (...skipping 1695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1885 } | 1899 } |
| 1886 } | 1900 } |
| 1887 | 1901 |
| 1888 class CodeTick { | 1902 class CodeTick { |
| 1889 final int address; | 1903 final int address; |
| 1890 final int exclusiveTicks; | 1904 final int exclusiveTicks; |
| 1891 final int inclusiveTicks; | 1905 final int inclusiveTicks; |
| 1892 CodeTick(this.address, this.exclusiveTicks, this.inclusiveTicks); | 1906 CodeTick(this.address, this.exclusiveTicks, this.inclusiveTicks); |
| 1893 } | 1907 } |
| 1894 | 1908 |
| 1895 | |
| 1896 class PcDescriptor extends Observable { | 1909 class PcDescriptor extends Observable { |
| 1897 final int address; | 1910 final int address; |
| 1898 @reflectable final int deoptId; | 1911 @reflectable final int deoptId; |
| 1899 @reflectable final int tokenPos; | 1912 @reflectable final int tokenPos; |
| 1900 @reflectable final int tryIndex; | 1913 @reflectable final int tryIndex; |
| 1901 @reflectable final String kind; | 1914 @reflectable final String kind; |
| 1902 @observable Script script; | 1915 @observable Script script; |
| 1903 @observable String formattedLine; | 1916 @observable String formattedLine; |
| 1904 PcDescriptor(this.address, this.deoptId, this.tokenPos, this.tryIndex, | 1917 PcDescriptor(this.address, this.deoptId, this.tokenPos, this.tryIndex, |
| 1905 this.kind); | 1918 this.kind); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1926 var line = script.tokenToLine(tokenPos); | 1939 var line = script.tokenToLine(tokenPos); |
| 1927 if (line == null) { | 1940 if (line == null) { |
| 1928 return; | 1941 return; |
| 1929 } | 1942 } |
| 1930 this.script = script; | 1943 this.script = script; |
| 1931 var scriptLine = script.getLine(line); | 1944 var scriptLine = script.getLine(line); |
| 1932 formattedLine = scriptLine.text; | 1945 formattedLine = scriptLine.text; |
| 1933 } | 1946 } |
| 1934 } | 1947 } |
| 1935 | 1948 |
| 1949 class PcDescriptors extends ServiceObject { |
| 1950 @observable Class clazz; |
| 1951 @observable int size; |
| 1952 bool get canCache => false; |
| 1953 bool get immutable => true; |
| 1954 @reflectable final List<PcDescriptor> descriptors = |
| 1955 new ObservableList<PcDescriptor>(); |
| 1956 |
| 1957 PcDescriptors._empty(ServiceObjectOwner owner) : super._empty(owner) { |
| 1958 print('created PcDescriptors.'); |
| 1959 } |
| 1960 |
| 1961 void _update(ObservableMap m, bool mapIsRef) { |
| 1962 if (mapIsRef) { |
| 1963 return; |
| 1964 } |
| 1965 _upgradeCollection(m, isolate); |
| 1966 clazz = m['class']; |
| 1967 size = m['size']; |
| 1968 descriptors.clear(); |
| 1969 for (var descriptor in m['members']) { |
| 1970 var address = int.parse(descriptor['pc'], radix:16); |
| 1971 var deoptId = descriptor['deoptId']; |
| 1972 var tokenPos = descriptor['tokenPos']; |
| 1973 var tryIndex = descriptor['tryIndex']; |
| 1974 var kind = descriptor['kind'].trim(); |
| 1975 descriptors.add( |
| 1976 new PcDescriptor(address, deoptId, tokenPos, tryIndex, kind)); |
| 1977 } |
| 1978 } |
| 1979 } |
| 1980 |
| 1981 class LocalVarDescriptor extends Observable { |
| 1982 @reflectable final String name; |
| 1983 @reflectable final int index; |
| 1984 @reflectable final int beginPos; |
| 1985 @reflectable final int endPos; |
| 1986 @reflectable final int scopeId; |
| 1987 @reflectable final String kind; |
| 1988 |
| 1989 LocalVarDescriptor(this.name, this.index, this.beginPos, this.endPos, |
| 1990 this.scopeId, this.kind); |
| 1991 } |
| 1992 |
| 1993 class LocalVarDescriptors extends ServiceObject { |
| 1994 @observable Class clazz; |
| 1995 @observable int size; |
| 1996 bool get canCache => false; |
| 1997 bool get immutable => true; |
| 1998 @reflectable final List<LocalVarDescriptor> descriptors = |
| 1999 new ObservableList<LocalVarDescriptor>(); |
| 2000 LocalVarDescriptors._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 2001 |
| 2002 void _update(ObservableMap m, bool mapIsRef) { |
| 2003 if (mapIsRef) { |
| 2004 return; |
| 2005 } |
| 2006 _upgradeCollection(m, isolate); |
| 2007 clazz = m['class']; |
| 2008 size = m['size']; |
| 2009 descriptors.clear(); |
| 2010 for (var descriptor in m['members']) { |
| 2011 var name = descriptor['name']; |
| 2012 var index = descriptor['index']; |
| 2013 var beginPos = descriptor['beginPos']; |
| 2014 var endPos = descriptor['endPos']; |
| 2015 var scopeId = descriptor['scopeId']; |
| 2016 var kind = descriptor['kind'].trim(); |
| 2017 descriptors.add( |
| 2018 new LocalVarDescriptor(name, index, beginPos, endPos, scopeId, kind)); |
| 2019 } |
| 2020 } |
| 2021 } |
| 2022 |
| 2023 class TokenStream extends ServiceObject { |
| 2024 @observable Class clazz; |
| 2025 @observable int size; |
| 2026 bool get canCache => false; |
| 2027 bool get immutable => true; |
| 2028 |
| 2029 @observable String privateKey; |
| 2030 |
| 2031 TokenStream._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 2032 |
| 2033 void _update(ObservableMap m, bool mapIsRef) { |
| 2034 if (mapIsRef) { |
| 2035 return; |
| 2036 } |
| 2037 _upgradeCollection(m, isolate); |
| 2038 clazz = m['class']; |
| 2039 size = m['size']; |
| 2040 privateKey = m['privateKey']; |
| 2041 } |
| 2042 } |
| 2043 |
| 1936 class CodeInstruction extends Observable { | 2044 class CodeInstruction extends Observable { |
| 1937 @observable final int address; | 2045 @observable final int address; |
| 1938 @observable final String machine; | 2046 @observable final String machine; |
| 1939 @observable final String human; | 2047 @observable final String human; |
| 1940 @observable CodeInstruction jumpTarget; | 2048 @observable CodeInstruction jumpTarget; |
| 1941 @reflectable List<PcDescriptor> descriptors = | 2049 @reflectable List<PcDescriptor> descriptors = |
| 1942 new ObservableList<PcDescriptor>(); | 2050 new ObservableList<PcDescriptor>(); |
| 1943 | 2051 |
| 1944 static String formatPercent(num a, num total) { | 2052 static String formatPercent(num a, num total) { |
| 1945 var percent = 100.0 * (a / total); | 2053 var percent = 100.0 * (a / total); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2082 @reflectable final callers = new List<CodeCallCount>(); | 2190 @reflectable final callers = new List<CodeCallCount>(); |
| 2083 @reflectable final callees = new List<CodeCallCount>(); | 2191 @reflectable final callees = new List<CodeCallCount>(); |
| 2084 @reflectable final instructions = new ObservableList<CodeInstruction>(); | 2192 @reflectable final instructions = new ObservableList<CodeInstruction>(); |
| 2085 @reflectable final addressTicks = new ObservableMap<int, CodeTick>(); | 2193 @reflectable final addressTicks = new ObservableMap<int, CodeTick>(); |
| 2086 @observable String formattedInclusiveTicks = ''; | 2194 @observable String formattedInclusiveTicks = ''; |
| 2087 @observable String formattedExclusiveTicks = ''; | 2195 @observable String formattedExclusiveTicks = ''; |
| 2088 @observable Instance objectPool; | 2196 @observable Instance objectPool; |
| 2089 @observable ServiceFunction function; | 2197 @observable ServiceFunction function; |
| 2090 @observable Script script; | 2198 @observable Script script; |
| 2091 @observable bool isOptimized = false; | 2199 @observable bool isOptimized = false; |
| 2092 String name; | |
| 2093 String vmName; | |
| 2094 | 2200 |
| 2095 bool get canCache => true; | 2201 bool get canCache => true; |
| 2096 bool get immutable => true; | 2202 bool get immutable => true; |
| 2097 | 2203 |
| 2098 Code._empty(ServiceObjectOwner owner) : super._empty(owner); | 2204 Code._empty(ServiceObjectOwner owner) : super._empty(owner); |
| 2099 | 2205 |
| 2100 // Reset all data associated with a profile. | 2206 // Reset all data associated with a profile. |
| 2101 void resetProfileData() { | 2207 void resetProfileData() { |
| 2102 totalSamplesInProfile = 0; | 2208 totalSamplesInProfile = 0; |
| 2103 exclusiveTicks = 0; | 2209 exclusiveTicks = 0; |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2561 var v = list[i]; | 2667 var v = list[i]; |
| 2562 if ((v is ObservableMap) && _isServiceMap(v)) { | 2668 if ((v is ObservableMap) && _isServiceMap(v)) { |
| 2563 list[i] = owner.getFromMap(v); | 2669 list[i] = owner.getFromMap(v); |
| 2564 } else if (v is ObservableList) { | 2670 } else if (v is ObservableList) { |
| 2565 _upgradeObservableList(v, owner); | 2671 _upgradeObservableList(v, owner); |
| 2566 } else if (v is ObservableMap) { | 2672 } else if (v is ObservableMap) { |
| 2567 _upgradeObservableMap(v, owner); | 2673 _upgradeObservableMap(v, owner); |
| 2568 } | 2674 } |
| 2569 } | 2675 } |
| 2570 } | 2676 } |
| OLD | NEW |