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 7e1b3d2f48f1bba91a3abf012a327942b481bad8..f92b299012a32960da64bd4f0eb7486651608f0a 100644 |
--- a/runtime/observatory/lib/src/service/object.dart |
+++ b/runtime/observatory/lib/src/service/object.dart |
@@ -2568,6 +2568,9 @@ class ServiceFunction extends HeapObject with Coverage { |
@observable Code unoptimizedCode; |
@observable bool isOptimizable; |
@observable bool isInlinable; |
+ @observable bool hasIntrinsic; |
+ @observable bool isRecognized; |
+ @observable bool isNative; |
@observable FunctionKind kind; |
@observable int deoptimizations; |
@observable String qualifiedName; |
@@ -2608,6 +2611,9 @@ class ServiceFunction extends HeapObject with Coverage { |
qualifiedName = name; |
} |
+ hasIntrinsic = map['_intrinsic']; |
+ isNative = map['_native']; |
+ |
if (mapIsRef) { |
return; |
} |
@@ -2619,6 +2625,7 @@ class ServiceFunction extends HeapObject with Coverage { |
code = map['code']; |
isOptimizable = map['_optimizable']; |
isInlinable = map['_inlinable']; |
+ isRecognized = map['_recognized']; |
unoptimizedCode = map['_unoptimizedCode']; |
deoptimizations = map['_deoptimizations']; |
usageCounter = map['_usageCounter']; |
@@ -3413,11 +3420,16 @@ class CodeInstruction extends Observable { |
@observable final int pcOffset; |
@observable final String machine; |
@observable final String human; |
+ @observable final ServiceObject object; |
@observable CodeInstruction jumpTarget; |
@reflectable List<PcDescriptor> descriptors = |
new ObservableList<PcDescriptor>(); |
- CodeInstruction(this.address, this.pcOffset, this.machine, this.human); |
+ CodeInstruction(this.address, |
+ this.pcOffset, |
+ this.machine, |
+ this.human, |
+ this.object); |
@reflectable bool get isComment => address == 0; |
@reflectable bool get hasDescriptors => descriptors.length > 0; |
@@ -3508,7 +3520,10 @@ class Code extends HeapObject { |
@observable ServiceObject objectPool; |
@observable ServiceFunction function; |
@observable Script script; |
- @observable bool isOptimized = false; |
+ @observable bool isOptimized; |
+ @observable bool hasIntrinsic; |
+ @observable bool isNative; |
+ |
@reflectable int startAddress = 0; |
@reflectable int endAddress = 0; |
@reflectable final instructions = new ObservableList<CodeInstruction>(); |
@@ -3578,6 +3593,8 @@ class Code extends HeapObject { |
vmName = (m.containsKey('_vmName') ? m['_vmName'] : name); |
isOptimized = m['_optimized']; |
kind = CodeKind.fromString(m['kind']); |
+ hasIntrinsic = m['_intrinsic']; |
+ isNative = m['_native']; |
if (mapIsRef) { |
return; |
} |
@@ -3657,20 +3674,25 @@ class Code extends HeapObject { |
instructions.clear(); |
instructionsByAddressOffset = new List(endAddress - startAddress); |
- assert((disassembly.length % 3) == 0); |
- for (var i = 0; i < disassembly.length; i += 3) { |
+ assert((disassembly.length % 4) == 0); |
+ for (var i = 0; i < disassembly.length; i += 4) { |
var address = 0; // Assume code comment. |
var machine = disassembly[i + 1]; |
var human = disassembly[i + 2]; |
+ var object = disassembly[i + 3]; |
+ if (object != null) { |
+ object = new ServiceObject._fromMap(owner, object); |
+ } |
var pcOffset = 0; |
- if (disassembly[i] != '') { |
+ if (disassembly[i] != null) { |
// Not a code comment, extract address. |
address = int.parse(disassembly[i], radix:16); |
pcOffset = address - startAddress; |
} |
- var instruction = new CodeInstruction(address, pcOffset, machine, human); |
+ var instruction = |
+ new CodeInstruction(address, pcOffset, machine, human, object); |
instructions.add(instruction); |
- if (disassembly[i] != '') { |
+ if (disassembly[i] != null) { |
// Not a code comment. |
instructionsByAddressOffset[pcOffset] = instruction; |
} |