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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: runtime/observatory/lib/src/service/object.dart
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 136de497f07471bd27903823a7805c71b5e5c4f4..f3ebd195b37c6fc738faf9252981ee3ab5a8c13e 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -102,6 +102,9 @@ abstract class ServiceObject extends Observable {
@reflectable String get vmType => _vmType;
String _vmType;
+ bool get isICData => vmType == 'ICData';
+ bool get isInstructions => vmType == 'Instructions';
+ bool get isObjectPool => vmType == 'ObjectPool';
bool get isContext => type == 'Context';
bool get isError => type == 'Error';
bool get isInstance => type == 'Instance';
@@ -203,12 +206,21 @@ abstract class ServiceObject extends Observable {
break;
case 'Object':
switch (vmType) {
- case 'PcDescriptors':
- obj = new PcDescriptors._empty(owner);
+ case 'ICData':
+ obj = new ICData._empty(owner);
+ break;
+ case 'Instructions':
+ obj = new Instructions._empty(owner);
break;
case 'LocalVarDescriptors':
obj = new LocalVarDescriptors._empty(owner);
break;
+ case 'ObjectPool':
+ obj = new ObjectPool._empty(owner);
+ break;
+ case 'PcDescriptors':
+ obj = new PcDescriptors._empty(owner);
+ break;
case 'TokenStream':
obj = new TokenStream._empty(owner);
break;
@@ -336,6 +348,14 @@ abstract class ServiceObject extends Observable {
}
}
+abstract class HeapObject extends ServiceObject {
+ @observable Class clazz;
+ @observable int size;
+ @observable int retainedSize;
+
+ HeapObject._empty(ServiceObjectOwner owner) : super._empty(owner);
+}
+
abstract class Coverage {
// Following getters and functions will be provided by [ServiceObject].
String get id;
@@ -1937,7 +1957,6 @@ class Instance extends ServiceObject {
kind = map['kind'];
clazz = map['class'];
- size = map['size'];
valueAsString = map['valueAsString'];
// Coerce absence to false.
valueAsStringIsTruncated = map['valueAsStringIsTruncated'] == true;
@@ -1951,6 +1970,8 @@ class Instance extends ServiceObject {
return;
}
+ size = map['size'];
+
oneByteFunction = map['_oneByteFunction'];
twoByteFunction = map['_twoByteFunction'];
externalOneByteFunction = map['_externalOneByteFunction'];
@@ -2035,7 +2056,6 @@ class Context extends ServiceObject {
// Extract full properties.
_upgradeCollection(map, isolate);
- size = map['size'];
length = map['length'];
parentContext = map['parent'];
@@ -2043,6 +2063,7 @@ class Context extends ServiceObject {
return;
}
+ size = map['size'];
clazz = map['class'];
variables = map['variables'];
@@ -2124,6 +2145,7 @@ class ServiceFunction extends ServiceObject with Coverage {
@observable int usageCounter;
@observable bool isDart;
@observable ProfileFunction profile;
+ @observable Instance icDataArray;
bool get immutable => false;
@@ -2137,7 +2159,7 @@ class ServiceFunction extends ServiceObject with Coverage {
dartOwner = map['owner'];
kind = FunctionKind.fromJSON(map['_kind']);
- isDart = !kind.isSynthetic();
+ isDart = kind.isDart();
if (dartOwner is ServiceFunction) {
ServiceFunction ownerFunction = dartOwner;
@@ -2168,6 +2190,7 @@ class ServiceFunction extends ServiceObject with Coverage {
unoptimizedCode = map['_unoptimizedCode'];
deoptimizations = map['_deoptimizations'];
usageCounter = map['_usageCounter'];
+ icDataArray = map['_icDataArray'];
}
}
@@ -2762,9 +2785,74 @@ class LocalVarDescriptors extends ServiceObject {
}
}
-class TokenStream extends ServiceObject {
- @observable Class clazz;
- @observable int size;
+class ObjectPool extends HeapObject {
+ bool get canCache => false;
+ bool get immutable => false;
+
+ @observable int length;
+ @observable List entries;
+
+ ObjectPool._empty(ServiceObjectOwner owner) : super._empty(owner);
+
+ void _update(ObservableMap m, bool mapIsRef) {
+ _upgradeCollection(m, isolate);
+ clazz = m['class'];
+ length = m['length'];
+ if (mapIsRef) {
+ return;
+ }
+ size = m['size'];
+ entries = m['_entries'];
+ }
+}
+
+class ICData extends HeapObject {
+ @observable ServiceObject dartOwner;
+ @observable String selector;
+ @observable Instance argumentsDescriptor;
+ @observable Instance entries;
+
+ bool get canCache => false;
+ bool get immutable => false;
+
+ ICData._empty(ServiceObjectOwner owner) : super._empty(owner);
+
+ void _update(ObservableMap m, bool mapIsRef) {
+ _upgradeCollection(m, isolate);
+ clazz = m['class'];
+ dartOwner = m['_owner'];
+ selector = m['_selector'];
+ if (mapIsRef) {
+ return;
+ }
+ size = m['size'];
+ argumentsDescriptor = m['_argumentsDescriptor'];
+ entries = m['_entries'];
+ }
+}
+
+class Instructions extends HeapObject {
+ bool get canCache => false;
+ bool get immutable => true;
+
+ @observable Code code;
+ @observable ObjectPool objectPool;
+
+ Instructions._empty(ServiceObjectOwner owner) : super._empty(owner);
+
+ void _update(ObservableMap m, bool mapIsRef) {
+ _upgradeCollection(m, isolate);
+ clazz = m['class'];
+ code = m['_code'];
+ if (mapIsRef) {
+ return;
+ }
+ size = m['size'];
+ objectPool = m['_objectPool'];
+ }
+}
+
+class TokenStream extends HeapObject {
bool get canCache => false;
bool get immutable => true;
@@ -2870,7 +2958,7 @@ class CodeInlineInterval {
CodeInlineInterval(this.start, this.end);
}
-class Code extends ServiceObject {
+class Code extends HeapObject {
@observable CodeKind kind;
@observable ServiceObject objectPool;
@observable ServiceFunction function;
@@ -2949,6 +3037,7 @@ class Code extends ServiceObject {
return;
}
_loaded = true;
+ size = m['size'];
startAddress = int.parse(m['_startAddress'], radix:16);
endAddress = int.parse(m['_endAddress'], radix:16);
function = isolate.getFromMap(m['function']);
« 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