Chromium Code Reviews| Index: runtime/vm/service/service.idl |
| diff --git a/runtime/vm/service/service.idl b/runtime/vm/service/service.idl |
| index e9afc3757e20559aab07d1f38410400ca565030c..001e43225578fa673d229d83f399166fde04843f 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. |
| +// |
| +// If your application relies on private properties, you should expect |
| +// 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.
|
| +// |
| +// <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 |
|
Cutch
2015/04/06 18:43:03
[optional]
turnidge
2015/04/06 19:23:58
Done.
|
| + |
| + // The disassembly of this code object. |
| + _disassembly UNDOCUMENTED |
|
Cutch
2015/04/06 18:43:03
[optional]
turnidge
2015/04/06 19:23:58
Done.
|
| + |
| + // 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 |
| +} |