| 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;
|
| }
|
|
|