| Index: runtime/vm/service/service.idl
|
| diff --git a/runtime/vm/service/service.idl b/runtime/vm/service/service.idl
|
| index e9afc3757e20559aab07d1f38410400ca565030c..4850a1c4eeeb73d1382a0e7d9bcadc9d1cdee612 100644
|
| --- a/runtime/vm/service/service.idl
|
| +++ b/runtime/vm/service/service.idl
|
| @@ -1,6 +1,82 @@
|
| +// <h2>Connecting to the VM Service</h2>
|
| //
|
| -// TODO(turnidge): Finish writing an idl description of the service protocol.
|
| +// TODO(turnidge): Describe how to connect, etc.
|
| //
|
| +// <h2>Types</h2>
|
| +//
|
| +// Every non-error response returned by the VM Service has the
|
| +// <code>type</code> property. This allows the client distinguish
|
| +// between different kinds of responses.
|
| +//
|
| +// If the type name of a response begins with an <code>@</code>
|
| +// character then that response is a _reference_. If the type name of
|
| +// a response does not begin with an <code>@</code> character then
|
| +// that response is an _object_ (or sometimes _full object_). A
|
| +// reference is meant to be a subset of a full object with just enough
|
| +// information for the client to generate a reasonable-looking link.
|
| +//
|
| +// For example, an isolate reference may look like this...
|
| +//
|
| +// {
|
| +// type: "@Isolate",
|
| +// id: "isolates/123",
|
| +// name: "worker"
|
| +// }
|
| +//
|
| +// ... and a full isolate object would have additional properties:
|
| +//
|
| +// {
|
| +// type: "Isolate",
|
| +// id: "isolates/123",
|
| +// name: "worker"
|
| +// entry: ...
|
| +// heaps: ...
|
| +// topFrame: ...
|
| +// ...
|
| +// }
|
| +//
|
| +// <h2>IDs and Names</h2>
|
| +//
|
| +// Many responses returned by the VM Service have an <code>id</code>
|
| +// property. This is an identifier used to request an object from an
|
| +// isolate using the <code>getObject</code> rpc. If two responses
|
| +// have the same id then they refer to the same object. The converse
|
| +// is not true: the same object may occasionally be returned with two
|
| +// different ids.
|
| +//
|
| +// The client must not parse ids -- they must be treated as opaque
|
| +// strings. We reserve the right to change the ids of objects.
|
| +//
|
| +// TODO(turnidge): Describe id/handle expiration. Provide guidance on
|
| +// which responses are cacheable/constant. Perhaps this needs to be
|
| +// signaled in the Response itself.
|
| +//
|
| +// Many responses have the <code>name</code> property. Names are
|
| +// provided so that objects can be displayed in a way that a Dart
|
| +// language programmer would find sensible.
|
| +//
|
| +// Note that names are not unique. Many objects will have the same
|
| +// name.
|
| +//
|
| +// <h2>Private Properties</h2>
|
| +//
|
| +// Some properties returned by the VM Service begin with an underscore
|
| +// (_) character. These properties are called _private
|
| +// properties_. Private properties provide private information
|
| +// specific to the VM's implementation. Private properties may be
|
| +// added, removed, or changed at any time with any release of the VM.
|
| +// They are provided for those tools that need this level of internal
|
| +// access, such as the Observatory.
|
| +//
|
| +// For example, some responses will have the <code>_vmType</code>
|
| +// property. This provides the VM-internal type name of an object,
|
| +// and is provided only when this type name differs from the
|
| +// <code>type</code> property.
|
| +//
|
| +// <b>If your application relies on private properties, you should expect
|
| +// to update it when new versions of the VM are released.</b>
|
| +//
|
| +// <hr>
|
|
|
| interface Service {
|
| // Returns global information about the Dart VM.
|
| @@ -140,10 +216,10 @@ interface Service {
|
| }
|
|
|
|
|
| -// Every top level response returned by the Service interface extends
|
| -// <code>Response</code>. This allows the client to distinguish
|
| -// between different kinds of responses by using the <code>type</code>
|
| -// property.
|
| +// Every non-error top level response returned by the Service
|
| +// interface extends <code>Response</code>. This allows the client to
|
| +// distinguish between different kinds of responses by using the
|
| +// <code>type</code> property.
|
| struct Response {
|
| // Every response returned by the VM Service has the
|
| // <code>type</code> property. This allows the client distinguish
|
| @@ -390,13 +466,106 @@ struct Object extends Response {
|
| // TODO(turnidge): VMObject.
|
|
|
|
|
| +// A reference to a Dart language library.
|
| +struct LibraryRef extends ObjectRef {
|
| + // The name of this library.
|
| + name string
|
| +
|
| + // The url of this library.
|
| + url string
|
| +}
|
| +
|
| +
|
| +// A Dart language library.
|
| +struct Library extends Object {
|
| + // The name of this library.
|
| + name string
|
| +
|
| + // The url of this library.
|
| + url string
|
| +
|
| + // A list of the imports for this library.
|
| + imports []LibraryRef
|
| +
|
| + // A list of the scripts which constitute this library.
|
| + scripts []ScriptRef
|
| +
|
| + // A list of the top-level variables in this library.
|
| + variables []FieldRef
|
| +
|
| + // A list of the top-level functions in this library.
|
| + functions []FunctionRef
|
| +
|
| + // A list of all classes in this library.
|
| + classes []ClassRef
|
| +}
|
| +
|
| +
|
| +// A reference to a Dart language script.
|
| +struct ScriptRef extends ObjectRef {
|
| + // A name for this script.
|
| + name string
|
| +
|
| + // What kind of script is this?
|
| + kind ScriptKind
|
| +}
|
| +
|
| +
|
| +// A Dart language script.
|
| +struct Script extends Object {
|
| + // A name for this script.
|
| + name string
|
| +
|
| + // What kind of script is this?
|
| + kind ScriptKind
|
| +
|
| + // The library which owns this script.
|
| + library LibraryRef
|
| +
|
| + // The source code for this script. For certain built-in scripts,
|
| + // this may be reconstructed without source comments.
|
| + source string
|
| +
|
| + // A table encoding a mapping from token position to line and column.
|
| + //
|
| + // Each entry in the array consists of a line number followed by
|
| + // (tokenPos, columnNumber) pairs:
|
| + //
|
| + // [lineNumber, (tokenPos, columnNumber)*]
|
| + //
|
| + // For example, the following table:
|
| + //
|
| + // [[1, 100, 5, 101, 8],[2, 102, 7]]
|
| + //
|
| + // Encodes the following mapping:
|
| + //
|
| + // tokenPos line column
|
| + // -------- ------ ------
|
| + // 100 1 5
|
| + // 101 1 8
|
| + // 102 2 7
|
| + //
|
| + // TODO(turnidge): The tool I'm using does not support [][].
|
| + // tokenPosTable [][]int
|
| + tokenPosTable int
|
| +}
|
| +
|
| +
|
| +enum ScriptKind {
|
| + script
|
| + library
|
| + source
|
| + patch
|
| +}
|
| +
|
| +
|
| // A reference to a Dart language class.
|
| struct ClassRef extends ObjectRef {
|
| // The name of this class.
|
| name string
|
|
|
| // A vm internal name, provided only when it is different than name.
|
| - _vmName string
|
| + _vmName string [optional]
|
| }
|
|
|
|
|
| @@ -406,7 +575,7 @@ struct Class extends Object {
|
| name string
|
|
|
| // A vm internal name, provided only when it is different than name.
|
| - _vmName string
|
| + _vmName string [optional]
|
|
|
| // The error which occurred during class finalization, if it exists.
|
| error InstanceRef [optional]
|
| @@ -460,6 +629,243 @@ struct ClassHeapStats extends Response {
|
| }
|
|
|
|
|
| +// A reference to a Dart language field or variable.
|
| +struct FieldRef extends ObjectRef {
|
| + // The name of this field.
|
| + name string
|
| +
|
| + // A vm internal name, provided only when it is different than name.
|
| + _vmName string [optional]
|
| +
|
| + // The value of this field, if the field is static.
|
| + value InstanceRef [optional]
|
| +
|
| + // The owner of this field, which can be either a LibraryRef for a
|
| + // ClassRef.
|
| + owner ObjectRef
|
| +
|
| + // The declared type of this field.
|
| + declaredType TypeRef
|
| +
|
| + // Is this field const?
|
| + const bool
|
| +
|
| + // Is this field final?
|
| + final bool
|
| +
|
| + // Is this field static?
|
| + static bool
|
| +}
|
| +
|
| +
|
| +// A Dart language field or variable.
|
| +struct Field extends ObjectRef {
|
| + // The name of this field.
|
| + name string
|
| +
|
| + // A vm internal name, provided only when it is different than name.
|
| + _vmName string [optional]
|
| +
|
| + // The value of this field, if the field is static.
|
| + value InstanceRef [optional]
|
| +
|
| + // The owner of this field, which can be either a LibraryRef for a
|
| + // ClassRef.
|
| + owner ObjectRef
|
| +
|
| + // The declared type of this field.
|
| + declaredType TypeRef
|
| +
|
| + // Is this field const?
|
| + const bool
|
| +
|
| + // Is this field final?
|
| + final bool
|
| +
|
| + // Is this field static?
|
| + static bool
|
| +
|
| + // The script containing this feild.
|
| + script ScriptRef [optional]
|
| +
|
| + // The token position of this field.
|
| + tokenPos int [optional]
|
| +
|
| + // Have we seen null assigned to this field?
|
| + _guardNullable bool
|
| +
|
| + // Have we seen a single class assigned to this field?
|
| + //
|
| + // TODO(johnmccutchan): This can actually be a string 'unknown' or
|
| + // 'dynamic' or a ClassRef. Change how this is encoded.
|
| + _guardClass string
|
| +
|
| + // Have we seen a fixed length list assigned to this field?
|
| + //
|
| + // TODO(johnmccutchan): This can actually be a string 'unknown' or
|
| + // 'dynamic' or a ClassRef. Change how this is encoded.
|
| + _guardLength string
|
| +}
|
| +
|
| +
|
| +// A reference to a Dart language function.
|
| +struct FunctionRef extends ObjectRef {
|
| + // The name of this function.
|
| + name string
|
| +
|
| + // A vm internal name, provided only when it is different than name.
|
| + _vmName string [optional]
|
| +
|
| + // The owner of this field, which can be a LibraryRef, ClassRef, or
|
| + // a FunctionRef.
|
| + owner ObjectRef
|
| +
|
| + // What kind of function is this?
|
| + kind FunctionKind
|
| +}
|
| +
|
| +
|
| +// A Dart language function.
|
| +struct Function extends ObjectRef {
|
| + // The name of this function.
|
| + name string
|
| +
|
| + // A vm internal name, provided only when it is different than name.
|
| + _vmName string [optional]
|
| +
|
| + // What kind of function is this?
|
| + kind FunctionKind
|
| +
|
| + // The owner of this field, which can be a LibraryRef, ClassRef, or
|
| + // a FunctionRef.
|
| + owner ObjectRef
|
| +
|
| + // Is this function static?
|
| + //
|
| + // TODO(turnidge): This is inconsistent with FieldRef.
|
| + static bool
|
| +
|
| + // Is this function const?
|
| + const bool
|
| +
|
| + // The script containing this function.
|
| + script ScriptRef [optional]
|
| +
|
| + // The first token position of this function.
|
| + tokenPos int [optional]
|
| +
|
| + // The last token position of this function.
|
| + endTokenPos int [optional]
|
| +
|
| + // The compiled code associated with this function.
|
| + code CodeRef [optional]
|
| +
|
| + // Are we able to generate optimized code for this function?
|
| + _optimizable bool
|
| +
|
| + // Are we able to inline this function?
|
| + _inlinable bool
|
| +
|
| + // The unoptimized version of this function, if retained.
|
| + _unoptimizedCode CodeRef [optional]
|
| +
|
| + // An indicator of how actively this function is used.
|
| + _usageCounter int
|
| +
|
| + // TODO(johnmccutchan): Document.
|
| + _optimizedCallSiteCount int
|
| +
|
| + // How many times has this function been deoptimized?
|
| + _deoptimizations int
|
| +}
|
| +
|
| +
|
| +enum FunctionKind {
|
| + RegularFunction
|
| + ClosureFunction
|
| + GetterFunction
|
| + SetterFunction
|
| + Constructor
|
| + ImplicitGetter
|
| + ImplicitSetter
|
| + ImplicitStaticFinalGetter
|
| + IrregexpFunction
|
| + StaticInitializer
|
| + MethodExtractor
|
| + NoSuchMethodDispatcher
|
| + InvokeFieldDispatcher
|
| + Collected
|
| + Native
|
| + Stub
|
| + Tag
|
| +}
|
| +
|
| +
|
| +// A reference to a compiled code object in the Dart VM.
|
| +struct CodeRef extends ObjectRef {
|
| + // A name for this code object
|
| + name string
|
| +
|
| + // A vm internal name, provided only when it is different than name.
|
| + _vmName string [optional]
|
| +
|
| + // What kind of code object is this?
|
| + kind CodeKind
|
| +
|
| + // Was this code generated using the optimizing compiler?
|
| + _optimized bool
|
| +}
|
| +
|
| +
|
| +// A compiled code object in the Dart VM.
|
| +struct Code extends Object {
|
| + // A name for this code object
|
| + name string
|
| +
|
| + // A vm internal name, provided only when it is different than name.
|
| + _vmName string [optional]
|
| +
|
| + // What kind of code object is this?
|
| + kind CodeKind
|
| +
|
| + // Was this code generated using the optimizing compiler?
|
| + _optimized bool
|
| +
|
| + // The function which corresponds to this compiled code.
|
| + function FunctionRef
|
| +
|
| + // The start address of the generated code as a hex string.
|
| + _startAddress string
|
| +
|
| + // The end address of the generated code as a hex string.
|
| + _endAddress string
|
| +
|
| + // The object pool associated with this code object.
|
| + _objectPool UNDOCUMENTED [optional]
|
| +
|
| + // The disassembly of this code object.
|
| + _disassembly UNDOCUMENTED [optional]
|
| +
|
| + // The pc descriptor table for this code object.
|
| + _descriptors UNDOCUMENTED [optional]
|
| +
|
| + // The inlined function table for this code object.
|
| + _inlinedFunctions UNDOCUMENTED [optional]
|
| +
|
| + // Inline interval information for this code object.
|
| + _inlinedIntervals UNDOCUMENTED [optional]
|
| +}
|
| +
|
| +
|
| +enum CodeKind {
|
| + Dart
|
| + Native
|
| + Stub
|
| + Tag
|
| + Collected
|
| +}
|
| +
|
| +
|
| // A reference to a type arguments vector.
|
| struct TypeArgumentsRef extends ObjectRef {
|
| // A name for this type argument list.
|
| @@ -516,35 +922,6 @@ struct Breakpoint extends Object {
|
| }
|
|
|
|
|
| -// A <code>CodeRef</code> encodes a reference to a <code>Code</code> object.
|
| -struct CodeRef extends ObjectRef {
|
| - TODO int
|
| -}
|
| -
|
| -
|
| -struct LibraryRef extends ObjectRef {
|
| - TODO int
|
| -}
|
| -
|
| -
|
| -// A <code>FunctionRef</code> encodes a reference to a <code>Function</code> object.
|
| -struct FunctionRef extends ObjectRef {
|
| - TODO int
|
| -}
|
| -
|
| -
|
| -// A <code>FieldRef</code> encodes a reference to a <code>Field</code> object.
|
| -struct FieldRef extends ObjectRef {
|
| - TODO int
|
| -}
|
| -
|
| -
|
| -// A <code>ScriptRef</code> encodes a reference to a <code>Script</code> object.
|
| -struct ScriptRef extends ObjectRef {
|
| - TODO int
|
| -}
|
| -
|
| -
|
| // A <code>Location</code> encodes a location withing a dart script.
|
| //
|
| // TODO(turnidge): Should this really be broken out as its own type?
|
| @@ -745,3 +1122,8 @@ enum MetricSelector {
|
| struct _EchoResponse extends Response {
|
| text string
|
| }
|
| +
|
| +
|
| +struct UNDOCUMENTED {
|
| + TODO int
|
| +}
|
|
|