Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // <h2>Connecting to the VM Service</h2> | |
| 1 // | 2 // |
| 2 // TODO(turnidge): Finish writing an idl description of the service protocol. | 3 // TODO(turnidge): Describe how to connect, etc. |
| 3 // | 4 // |
| 5 // <h2>Types</h2> | |
| 6 // | |
| 7 // Every non-error response returned by the VM Service has the | |
| 8 // <code>type</code> property. This allows the client distinguish | |
| 9 // between different kinds of responses. | |
| 10 // | |
| 11 // If the type name of a response begins with an <code>@</code> | |
| 12 // character then that response is a _reference_. If the type name of | |
| 13 // a response does not begin with an <code>@</code> character then | |
| 14 // that response is an _object_ (or sometimes _full object_). A | |
| 15 // reference is meant to be a subset of a full object with just enough | |
| 16 // information for the client to generate a reasonable-looking link. | |
| 17 // | |
| 18 // For example, an isolate reference may look like this... | |
| 19 // | |
| 20 // { | |
| 21 // type: "@Isolate", | |
| 22 // id: "isolates/123", | |
| 23 // name: "worker" | |
| 24 // } | |
| 25 // | |
| 26 // ... and a full isolate object would have additional properties: | |
| 27 // | |
| 28 // { | |
| 29 // type: "Isolate", | |
| 30 // id: "isolates/123", | |
| 31 // name: "worker" | |
| 32 // entry: ... | |
| 33 // heaps: ... | |
| 34 // topFrame: ... | |
| 35 // ... | |
| 36 // } | |
| 37 // | |
| 38 // <h2>IDs and Names</h2> | |
| 39 // | |
| 40 // Many responses returned by the VM Service have an <code>id</code> | |
| 41 // property. This is an identifier used to request an object from an | |
| 42 // isolate using the <code>getObject</code> rpc. If two responses | |
| 43 // have the same id then they refer to the same object. The converse | |
| 44 // is not true: the same object may occasionally be returned with two | |
| 45 // different ids. | |
| 46 // | |
| 47 // The client must not parse ids -- they must be treated as opaque | |
| 48 // strings. We reserve the right to change the ids of objects. | |
| 49 // | |
| 50 // TODO(turnidge): Describe id/handle expiration. Provide guidance on | |
| 51 // which responses are cacheable/constant. Perhaps this needs to be | |
| 52 // signaled in the Response itself. | |
| 53 // | |
| 54 // Many responses have the <code>name</code> property. Names are | |
| 55 // provided so that objects can be displayed in a way that a Dart | |
| 56 // language programmer would find sensible. | |
| 57 // | |
| 58 // Note that names are not unique. Many objects will have the same | |
| 59 // name. | |
| 60 // | |
| 61 // <h2>Private Properties</h2> | |
| 62 // | |
| 63 // Some properties returned by the VM Service begin with an underscore | |
| 64 // (_) character. These properties are called _private | |
| 65 // properties_. Private properties provide private information | |
| 66 // specific to the VM's implementation. Private properties may be | |
| 67 // added, removed, or changed at any time with any release of the VM. | |
| 68 // They are provided for those tools that need this level of internal | |
| 69 // access, such as the Observatory. | |
| 70 // | |
| 71 // For example, some responses will have the <code>_vmType</code> | |
| 72 // property. This provides the VM-internal type name of an object, | |
| 73 // and is provided only when this type name differs from the | |
| 74 // <code>type</code> property. | |
| 75 // | |
| 76 // If your application relies on private properties, you should expect | |
| 77 // to update it when new versions of the VM are released. | |
|
Cutch
2015/04/06 18:43:03
would be nice to bold lines 76, 77
turnidge
2015/04/06 19:23:58
Done.
| |
| 78 // | |
| 79 // <hr> | |
| 4 | 80 |
| 5 interface Service { | 81 interface Service { |
| 6 // Returns global information about the Dart VM. | 82 // Returns global information about the Dart VM. |
| 7 getVM() VM | 83 getVM() VM |
| 8 | 84 |
| 9 // Changes the debugging name for some isolate. | 85 // Changes the debugging name for some isolate. |
| 10 setName(isolateId string, name string) Response | 86 setName(isolateId string, name string) Response |
| 11 | 87 |
| 12 // Returns information about an isolate. | 88 // Returns information about an isolate. |
| 13 getIsolate(isolateId string) Isolate | 89 getIsolate(isolateId string) Isolate |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 133 text string) _EchoResponse | 209 text string) _EchoResponse |
| 134 | 210 |
| 135 // Response is bad JSON. | 211 // Response is bad JSON. |
| 136 _respondWithMalformedJson(isolateId string) Response | 212 _respondWithMalformedJson(isolateId string) Response |
| 137 | 213 |
| 138 // Response is not an object. | 214 // Response is not an object. |
| 139 _respondWithMalformedObject(isolateId string) Response | 215 _respondWithMalformedObject(isolateId string) Response |
| 140 } | 216 } |
| 141 | 217 |
| 142 | 218 |
| 143 // Every top level response returned by the Service interface extends | 219 // Every non-error top level response returned by the Service |
| 144 // <code>Response</code>. This allows the client to distinguish | 220 // interface extends <code>Response</code>. This allows the client to |
| 145 // between different kinds of responses by using the <code>type</code> | 221 // distinguish between different kinds of responses by using the |
| 146 // property. | 222 // <code>type</code> property. |
| 147 struct Response { | 223 struct Response { |
| 148 // Every response returned by the VM Service has the | 224 // Every response returned by the VM Service has the |
| 149 // <code>type</code> property. This allows the client distinguish | 225 // <code>type</code> property. This allows the client distinguish |
| 150 // between different kinds of responses. | 226 // between different kinds of responses. |
| 151 type string | 227 type string |
| 152 | 228 |
| 153 // Some responses will have the <code>_vmType</code> property. This | 229 // Some responses will have the <code>_vmType</code> property. This |
| 154 // provides the VM-internal type name of an object, and is provided | 230 // provides the VM-internal type name of an object, and is provided |
| 155 // only when this type name differs from the <code>type</code> | 231 // only when this type name differs from the <code>type</code> |
| 156 // property. | 232 // property. |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 struct Object extends Response { | 459 struct Object extends Response { |
| 384 // A unique identifier for this object. | 460 // A unique identifier for this object. |
| 385 id string | 461 id string |
| 386 } | 462 } |
| 387 | 463 |
| 388 | 464 |
| 389 // TODO(turnidge): null type | 465 // TODO(turnidge): null type |
| 390 // TODO(turnidge): VMObject. | 466 // TODO(turnidge): VMObject. |
| 391 | 467 |
| 392 | 468 |
| 469 // A reference to a Dart language library. | |
| 470 struct LibraryRef extends ObjectRef { | |
| 471 // The name of this library. | |
| 472 name string | |
| 473 | |
| 474 // The url of this library. | |
| 475 url string | |
| 476 } | |
| 477 | |
| 478 | |
| 479 // A Dart language library. | |
| 480 struct Library extends Object { | |
| 481 // The name of this library. | |
| 482 name string | |
| 483 | |
| 484 // The url of this library. | |
| 485 url string | |
| 486 | |
| 487 // A list of the imports for this library. | |
| 488 imports []LibraryRef | |
| 489 | |
| 490 // A list of the scripts which constitute this library. | |
| 491 scripts []ScriptRef | |
| 492 | |
| 493 // A list of the top-level variables in this library. | |
| 494 variables []FieldRef | |
| 495 | |
| 496 // A list of the top-level functions in this library. | |
| 497 functions []FunctionRef | |
| 498 | |
| 499 // A list of all classes in this library. | |
| 500 classes []ClassRef | |
| 501 } | |
| 502 | |
| 503 | |
| 504 // A reference to a Dart language script. | |
| 505 struct ScriptRef extends ObjectRef { | |
| 506 // A name for this script. | |
| 507 name string | |
| 508 | |
| 509 // What kind of script is this? | |
| 510 kind ScriptKind | |
| 511 } | |
| 512 | |
| 513 | |
| 514 // A Dart language script. | |
| 515 struct Script extends Object { | |
| 516 // A name for this script. | |
| 517 name string | |
| 518 | |
| 519 // What kind of script is this? | |
| 520 kind ScriptKind | |
| 521 | |
| 522 // The library which owns this script. | |
| 523 library LibraryRef | |
| 524 | |
| 525 // The source code for this script. For certain built-in scripts, | |
| 526 // this may be reconstructed without source comments. | |
| 527 source string | |
| 528 | |
| 529 // A table encoding a mapping from token position to line and column. | |
| 530 // | |
| 531 // Each entry in the array consists of a line number followed by | |
| 532 // (tokenPos, columnNumber) pairs: | |
| 533 // | |
| 534 // [lineNumber, (tokenPos, columnNumber)*] | |
| 535 // | |
| 536 // For example, the following table: | |
| 537 // | |
| 538 // [[1, 100, 5, 101, 8],[2, 102, 7]] | |
| 539 // | |
| 540 // Encodes the following mapping: | |
| 541 // | |
| 542 // tokenPos line column | |
| 543 // -------- ------ ------ | |
| 544 // 100 1 5 | |
| 545 // 101 1 8 | |
| 546 // 102 2 7 | |
| 547 // | |
| 548 // TODO(turnidge): The tool I'm using does not support [][]. | |
| 549 // tokenPosTable [][]int | |
| 550 tokenPosTable int | |
| 551 } | |
| 552 | |
| 553 | |
| 554 enum ScriptKind { | |
| 555 script | |
| 556 library | |
| 557 source | |
| 558 patch | |
| 559 } | |
| 560 | |
| 561 | |
| 393 // A reference to a Dart language class. | 562 // A reference to a Dart language class. |
| 394 struct ClassRef extends ObjectRef { | 563 struct ClassRef extends ObjectRef { |
| 395 // The name of this class. | 564 // The name of this class. |
| 396 name string | 565 name string |
| 397 | 566 |
| 398 // A vm internal name, provided only when it is different than name. | 567 // A vm internal name, provided only when it is different than name. |
| 399 _vmName string | 568 _vmName string [optional] |
| 400 } | 569 } |
| 401 | 570 |
| 402 | 571 |
| 403 // A Dart language class. | 572 // A Dart language class. |
| 404 struct Class extends Object { | 573 struct Class extends Object { |
| 405 // The name of this class. | 574 // The name of this class. |
| 406 name string | 575 name string |
| 407 | 576 |
| 408 // A vm internal name, provided only when it is different than name. | 577 // A vm internal name, provided only when it is different than name. |
| 409 _vmName string | 578 _vmName string [optional] |
| 410 | 579 |
| 411 // The error which occurred during class finalization, if it exists. | 580 // The error which occurred during class finalization, if it exists. |
| 412 error InstanceRef [optional] | 581 error InstanceRef [optional] |
| 413 | 582 |
| 414 // Is this an abstract class? | 583 // Is this an abstract class? |
| 415 abstract bool | 584 abstract bool |
| 416 | 585 |
| 417 // Is this a const class? | 586 // Is this a const class? |
| 418 const bool | 587 const bool |
| 419 | 588 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 453 // Allocation statistics for this class, if available. | 622 // Allocation statistics for this class, if available. |
| 454 allocationStats ClassHeapStats [optional] | 623 allocationStats ClassHeapStats [optional] |
| 455 } | 624 } |
| 456 | 625 |
| 457 | 626 |
| 458 struct ClassHeapStats extends Response { | 627 struct ClassHeapStats extends Response { |
| 459 TODO int | 628 TODO int |
| 460 } | 629 } |
| 461 | 630 |
| 462 | 631 |
| 632 // A reference to a Dart language field or variable. | |
| 633 struct FieldRef extends ObjectRef { | |
| 634 // The name of this field. | |
| 635 name string | |
| 636 | |
| 637 // A vm internal name, provided only when it is different than name. | |
| 638 _vmName string [optional] | |
| 639 | |
| 640 // The value of this field, if the field is static. | |
| 641 value InstanceRef [optional] | |
| 642 | |
| 643 // The owner of this field, which can be either a LibraryRef for a | |
| 644 // ClassRef. | |
| 645 owner ObjectRef | |
| 646 | |
| 647 // The declared type of this field. | |
| 648 declaredType TypeRef | |
| 649 | |
| 650 // Is this field const? | |
| 651 const bool | |
| 652 | |
| 653 // Is this field final? | |
| 654 final bool | |
| 655 | |
| 656 // Is this field static? | |
| 657 static bool | |
| 658 } | |
| 659 | |
| 660 | |
| 661 // A Dart language field or variable. | |
| 662 struct Field extends ObjectRef { | |
| 663 // The name of this field. | |
| 664 name string | |
| 665 | |
| 666 // A vm internal name, provided only when it is different than name. | |
| 667 _vmName string [optional] | |
| 668 | |
| 669 // The value of this field, if the field is static. | |
| 670 value InstanceRef [optional] | |
| 671 | |
| 672 // The owner of this field, which can be either a LibraryRef for a | |
| 673 // ClassRef. | |
| 674 owner ObjectRef | |
| 675 | |
| 676 // The declared type of this field. | |
| 677 declaredType TypeRef | |
| 678 | |
| 679 // Is this field const? | |
| 680 const bool | |
| 681 | |
| 682 // Is this field final? | |
| 683 final bool | |
| 684 | |
| 685 // Is this field static? | |
| 686 static bool | |
| 687 | |
| 688 // The script containing this feild. | |
| 689 script ScriptRef [optional] | |
| 690 | |
| 691 // The token position of this field. | |
| 692 tokenPos int [optional] | |
| 693 | |
| 694 // Have we seen null assigned to this field? | |
| 695 _guardNullable bool | |
| 696 | |
| 697 // Have we seen a single class assigned to this field? | |
| 698 // | |
| 699 // TODO(johnmccutchan): This can actually be a string 'unknown' or | |
| 700 // 'dynamic' or a ClassRef. Change how this is encoded. | |
| 701 _guardClass string | |
| 702 | |
| 703 // Have we seen a fixed length list assigned to this field? | |
| 704 // | |
| 705 // TODO(johnmccutchan): This can actually be a string 'unknown' or | |
| 706 // 'dynamic' or a ClassRef. Change how this is encoded. | |
| 707 _guardLength string | |
| 708 } | |
| 709 | |
| 710 | |
| 711 // A reference to a Dart language function. | |
| 712 struct FunctionRef extends ObjectRef { | |
| 713 // The name of this function. | |
| 714 name string | |
| 715 | |
| 716 // A vm internal name, provided only when it is different than name. | |
| 717 _vmName string [optional] | |
| 718 | |
| 719 // The owner of this field, which can be a LibraryRef, ClassRef, or | |
| 720 // a FunctionRef. | |
| 721 owner ObjectRef | |
| 722 | |
| 723 // What kind of function is this? | |
| 724 kind FunctionKind | |
| 725 } | |
| 726 | |
| 727 | |
| 728 // A Dart language function. | |
| 729 struct Function extends ObjectRef { | |
| 730 // The name of this function. | |
| 731 name string | |
| 732 | |
| 733 // A vm internal name, provided only when it is different than name. | |
| 734 _vmName string [optional] | |
| 735 | |
| 736 // What kind of function is this? | |
| 737 kind FunctionKind | |
| 738 | |
| 739 // The owner of this field, which can be a LibraryRef, ClassRef, or | |
| 740 // a FunctionRef. | |
| 741 owner ObjectRef | |
| 742 | |
| 743 // Is this function static? | |
| 744 // | |
| 745 // TODO(turnidge): This is inconsistent with FieldRef. | |
| 746 static bool | |
| 747 | |
| 748 // Is this function const? | |
| 749 const bool | |
| 750 | |
| 751 // The script containing this function. | |
| 752 script ScriptRef [optional] | |
| 753 | |
| 754 // The first token position of this function. | |
| 755 tokenPos int [optional] | |
| 756 | |
| 757 // The last token position of this function. | |
| 758 endTokenPos int [optional] | |
| 759 | |
| 760 // The compiled code associated with this function. | |
| 761 code CodeRef [optional] | |
| 762 | |
| 763 // Are we able to generate optimized code for this function? | |
| 764 _optimizable bool | |
| 765 | |
| 766 // Are we able to inline this function? | |
| 767 _inlinable bool | |
| 768 | |
| 769 // The unoptimized version of this function, if retained. | |
| 770 _unoptimizedCode CodeRef [optional] | |
| 771 | |
| 772 // An indicator of how actively this function is used. | |
| 773 _usageCounter int | |
| 774 | |
| 775 // TODO(johnmccutchan): Document. | |
| 776 _optimizedCallSiteCount int | |
| 777 | |
| 778 // How many times has this function been deoptimized? | |
| 779 _deoptimizations int | |
| 780 } | |
| 781 | |
| 782 | |
| 783 enum FunctionKind { | |
| 784 RegularFunction | |
| 785 ClosureFunction | |
| 786 GetterFunction | |
| 787 SetterFunction | |
| 788 Constructor | |
| 789 ImplicitGetter | |
| 790 ImplicitSetter | |
| 791 ImplicitStaticFinalGetter | |
| 792 IrregexpFunction | |
| 793 StaticInitializer | |
| 794 MethodExtractor | |
| 795 NoSuchMethodDispatcher | |
| 796 InvokeFieldDispatcher | |
| 797 Collected | |
| 798 Native | |
| 799 Stub | |
| 800 Tag | |
| 801 } | |
| 802 | |
| 803 | |
| 804 // A reference to a compiled code object in the Dart VM. | |
| 805 struct CodeRef extends ObjectRef { | |
| 806 // A name for this code object | |
| 807 name string | |
| 808 | |
| 809 // A vm internal name, provided only when it is different than name. | |
| 810 _vmName string [optional] | |
| 811 | |
| 812 // What kind of code object is this? | |
| 813 kind CodeKind | |
| 814 | |
| 815 // Was this code generated using the optimizing compiler? | |
| 816 _optimized bool | |
| 817 } | |
| 818 | |
| 819 | |
| 820 // A compiled code object in the Dart VM. | |
| 821 struct Code extends Object { | |
| 822 // A name for this code object | |
| 823 name string | |
| 824 | |
| 825 // A vm internal name, provided only when it is different than name. | |
| 826 _vmName string [optional] | |
| 827 | |
| 828 // What kind of code object is this? | |
| 829 kind CodeKind | |
| 830 | |
| 831 // Was this code generated using the optimizing compiler? | |
| 832 _optimized bool | |
| 833 | |
| 834 // The function which corresponds to this compiled code. | |
| 835 function FunctionRef | |
| 836 | |
| 837 // The start address of the generated code as a hex string. | |
| 838 _startAddress string | |
| 839 | |
| 840 // The end address of the generated code as a hex string. | |
| 841 _endAddress string | |
| 842 | |
| 843 // The object pool associated with this code object. | |
| 844 _objectPool UNDOCUMENTED | |
|
Cutch
2015/04/06 18:43:03
[optional]
turnidge
2015/04/06 19:23:58
Done.
| |
| 845 | |
| 846 // The disassembly of this code object. | |
| 847 _disassembly UNDOCUMENTED | |
|
Cutch
2015/04/06 18:43:03
[optional]
turnidge
2015/04/06 19:23:58
Done.
| |
| 848 | |
| 849 // The pc descriptor table for this code object. | |
| 850 _descriptors UNDOCUMENTED [optional] | |
| 851 | |
| 852 // The inlined function table for this code object. | |
| 853 _inlinedFunctions UNDOCUMENTED [optional] | |
| 854 | |
| 855 // Inline interval information for this code object. | |
| 856 _inlinedIntervals UNDOCUMENTED [optional] | |
| 857 } | |
| 858 | |
| 859 | |
| 860 enum CodeKind { | |
| 861 Dart | |
| 862 Native | |
| 863 Stub | |
| 864 Tag | |
| 865 Collected | |
| 866 } | |
| 867 | |
| 868 | |
| 463 // A reference to a type arguments vector. | 869 // A reference to a type arguments vector. |
| 464 struct TypeArgumentsRef extends ObjectRef { | 870 struct TypeArgumentsRef extends ObjectRef { |
| 465 // A name for this type argument list. | 871 // A name for this type argument list. |
| 466 name string | 872 name string |
| 467 | 873 |
| 468 // A vm internal name, provided only when it is different than name. | 874 // A vm internal name, provided only when it is different than name. |
| 469 _vmName string | 875 _vmName string |
| 470 } | 876 } |
| 471 | 877 |
| 472 | 878 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 509 | 915 |
| 510 | 916 |
| 511 // A <code>Breakpoint</code> describes a debugger breakpoint. | 917 // A <code>Breakpoint</code> describes a debugger breakpoint. |
| 512 struct Breakpoint extends Object { | 918 struct Breakpoint extends Object { |
| 513 breakpointNumber int | 919 breakpointNumber int |
| 514 resolved bool | 920 resolved bool |
| 515 location Location | 921 location Location |
| 516 } | 922 } |
| 517 | 923 |
| 518 | 924 |
| 519 // A <code>CodeRef</code> encodes a reference to a <code>Code</code> object. | |
| 520 struct CodeRef extends ObjectRef { | |
| 521 TODO int | |
| 522 } | |
| 523 | |
| 524 | |
| 525 struct LibraryRef extends ObjectRef { | |
| 526 TODO int | |
| 527 } | |
| 528 | |
| 529 | |
| 530 // A <code>FunctionRef</code> encodes a reference to a <code>Function</code> obj ect. | |
| 531 struct FunctionRef extends ObjectRef { | |
| 532 TODO int | |
| 533 } | |
| 534 | |
| 535 | |
| 536 // A <code>FieldRef</code> encodes a reference to a <code>Field</code> object. | |
| 537 struct FieldRef extends ObjectRef { | |
| 538 TODO int | |
| 539 } | |
| 540 | |
| 541 | |
| 542 // A <code>ScriptRef</code> encodes a reference to a <code>Script</code> object. | |
| 543 struct ScriptRef extends ObjectRef { | |
| 544 TODO int | |
| 545 } | |
| 546 | |
| 547 | |
| 548 // A <code>Location</code> encodes a location withing a dart script. | 925 // A <code>Location</code> encodes a location withing a dart script. |
| 549 // | 926 // |
| 550 // TODO(turnidge): Should this really be broken out as its own type? | 927 // TODO(turnidge): Should this really be broken out as its own type? |
| 551 // If so, we should use it more consistently in the api. For example, | 928 // If so, we should use it more consistently in the api. For example, |
| 552 // in Frame. | 929 // in Frame. |
| 553 struct Location { | 930 struct Location { |
| 554 script ScriptRef | 931 script ScriptRef |
| 555 tokenPos int | 932 tokenPos int |
| 556 } | 933 } |
| 557 | 934 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 738 // should be retrieved from an isolate. | 1115 // should be retrieved from an isolate. |
| 739 enum MetricSelector { | 1116 enum MetricSelector { |
| 740 Dart | 1117 Dart |
| 741 Native | 1118 Native |
| 742 } | 1119 } |
| 743 | 1120 |
| 744 | 1121 |
| 745 struct _EchoResponse extends Response { | 1122 struct _EchoResponse extends Response { |
| 746 text string | 1123 text string |
| 747 } | 1124 } |
| 1125 | |
| 1126 | |
| 1127 struct UNDOCUMENTED { | |
| 1128 TODO int | |
| 1129 } | |
| OLD | NEW |