blob: e91537814e81502cf4a3fe2f00271f86ae4e3ccb [file] [log] [blame]
//
// TODO(turnidge): Finish writing an idl description of the service protocol.
//
interface Service {
// Returns the list of breakpoints for an isolate.
getBreakpoints(isolateId string) BreakpointList
// Adds a breakpoint at the specified line.
//
// TODO(turnidge): Make line an int instead of a string.
addBreakpoint(isolateId string,
scriptId string,
line string) Breakpoint
// Removes the specified breakpoint
removeBreakpoint(isolateId string, breakpointId string) Response
// Requests that an isolate pause execution.
pause(isolateId string) Response
// Requests that an isolate resume execution.
//
// <code>step</code> is optional and indicates whether execution
// should single-step.
resume(isolateId string, step StepOption) Response
// Evaluate an expression in the context of some target.
eval(isolateId string, targetId string, expression string) InstanceRef
// Returns the current execution stack for an isolate.
getStack(isolateId string) Stack
// Returns code coverage information for a library, script, class,
// or function.
getCoverage(isolateId string, targetId string) CodeCoverage
// Returns a full cpu profile for an isolate.
//
// <code>tagSelector</code> is optional with default 'UserVM'.
getCpuProfile(isolateId string, tags TagSelector) CpuProfile
// Returns a simple tag-based profile for an isolate.
getTagProfile(isolateId string) TagProfile
// Returns an allocation profile for an isolate.
//
// <code>reset</code> is optional and indicates whether allocation
// accumulators should be reset.
//
// <code>gc</code> is optional and indicates whether a full
getAllocationProfile(isolateId string,
reset bool,
gc GCOption) AllocationProfile
// Returns the heap map for an isolate.
getHeapMap(isolateId string) HeapMap
// Returns how many bytes are retained by some target Class or Instance.
getRetainedSize(isolateId string, targetId string) InstanceRef
// Returns a path demonstrating why an object is retained in memory.
//
// TODO(turnidge): Make limit an int instead of a string.
getRetainingPath(isolateId string,
targetId string,
limit int) RetainingPath
// Returns a collection of inbound references to some object.
//
// TODO(turnidge): Make limit an int instead of a string.
getInboundReferences(isolateId string,
targetId string,
limit int) InboundReferences
getClassList(isolateId string) ClassList
// When <code>onlyWithInstantiations</code> is true, the list only includes
// type arguments with instantiations. Otherwise, all type arguments are
// returned.
getTypeArgumentsList(isolateId string,
onlyWithInstantiations bool) TypeArgumentsList
getIsolateMetricList(isolateId string,
type MetricSelector) MetricList
getIsolateMetric(isolateId string,
metricId string) Metric
getVMMetricList() MetricList
getVMMetric(metricId string) Metric
_echo(isolateId string,
text string) _EchoResponse
_echoVM(text string) _EchoResponse
// Triggers a ServiceEvent with EventType '_Echo'.
_triggerEchoEvent(isolateId string,
text string) _EchoResponse
// Response is bad JSON.
_respondWithMalformedJson(isolateId string) Response
// Response is not an object.
_respondWithMalformedObject(isolateId string) Response
}
// 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.
struct Response {
// Every response returned by the VM Service has the
// <code>type</code> property. This allows the client distinguish
// between different kinds of responses.
type string
// 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.
_vmType string [optional]
}
struct _EchoResponse extends Response {
text string
}
// Persistent objects in the vm are returned as subclasses of Object.
struct Object extends Response {
// The object <code>id</code> can be used to refer to a persistent
// object inside the vm or an isolate.
id string
}
// An <code>Instance</code> represents a Dart-language object.
struct Instance extends Object {
placeholder int
}
// A <code>Breakpoint</code> describes a debugger breakpoint.
struct Breakpoint extends Object {
breakpointNumber int
enabled bool
resolved bool
location Location
}
// References to persistent objects in the vm are returned as
// subclasses of ObjectRef.
struct ObjectRef extends Response {
// The object <code>id</code> can be used to refer to a persistent
// object inside the vm or an isolate.
id string
}
// A <code>CodeRef</code> encodes a reference to a <code>Code</code> object.
struct CodeRef extends ObjectRef {
placeholder int
}
struct ClassRef extends ObjectRef {
placeholder int
}
struct TypeArgumentsRef extends ObjectRef {
placeholder int
}
// A <code>FunctionRef</code> encodes a reference to a <code>Function</code> object.
struct FunctionRef extends ObjectRef {
placeholder int
}
// A <code>FieldRef</code> encodes a reference to a <code>Field</code> object.
struct FieldRef extends ObjectRef {
placeholder int
}
// A <code>InstanceRef</code> encodes a reference to a <code>Instance</code> object.
struct InstanceRef extends ObjectRef {
placeholder int
}
// A <code>ScriptRef</code> encodes a reference to a <code>Script</code> object.
struct ScriptRef extends ObjectRef {
placeholder int
}
struct Class extends Object {
placeholder int
}
struct TypeArguments extends Object {
placeholder int
}
// A <code>Location</code> encodes a location withing a dart script.
//
// TODO(turnidge): Should this really be broken out as its own type?
// If so, we should use it more consistently in the api. For example,
// in Frame.
struct Location {
script ScriptRef
tokenPos int
}
// A <code>Variable</code> represents one name/value pair from a frame.
struct Variable {
name string
value InstanceRef
}
// A <code>Frame</code> represents one frame from an isolate's stack.
struct Frame {
script ScriptRef
tokenPos int
function FunctionRef
code CodeRef
vars []Variable
}
// A <code>Stack</code> represents an isolate's execution stack.
struct Stack extends Response {
frames []Frame
}
struct CodeCoverage extends Response {
placeholder int
}
// A <code>TagProfile</code> is a limited profile encoded as parallel
// arrays of tag names and tag values.
struct TagProfile extends Response {
names []string
counters []int
}
// A list of <code>Breakpoint</code>
struct BreakpointList extends Response {
breakpoints []Breakpoint
}
// An <code>AllocationProfile</code> encodes an allocation profile.
struct AllocationProfile extends Response {
todo int
}
// A <code>CpuProfile</code> encodes a full cpu profile.
struct CpuProfile extends Response {
samples int
depth int
period int
timeSpan float
exclusive_trie []int
codes []CodeRegion
}
// A <code>CodeRegion</code> represents profiling information for a
// specific <code>Code</code> object.
struct CodeRegion {
kind string
inclusive_ticks int
exclusive_ticks int
code CodeRef
ticks []int
callers []int
}
// An <code>HeapMap</code> provides a memory view of all heap allocated objects.
struct HeapMap extends Response {
todo int
}
// An <code>HeapMap</code> provides a memory view of all heap allocated objects.
struct RetainingPath extends Response {
length int
elements []RetainingPathElement
}
// One entry in a <code>RetainingPath</code>.
struct RetainingPathElement {
index int
element InstanceRef
parentListIndex int [optional]
parentField FieldRef [optional]
}
struct InboundReferences extends Response {
length int
references []InboundReference
}
// TODO(koda): slot can actually be a string, and integer or a
// FieldRef. Fix this to be consistent with RetainingPathElement.
struct InboundReference {
source InstanceRef
slot int
}
struct ClassList extends Response {
classes []ClassRef
}
struct TypeArgumentsList extends Response {
tableSize int
tableUsed int
typeArguments []TypeArgumentsRef
}
struct MetricList extends Response {
metrics []Metric
}
struct Metric extends Response {
name string
description string
}
struct Gauge extends Metric {
value double
min double
max double
}
struct Counter extends Metric {
value double
}
// A <code>GCOption</code> is used to indicate which form of garbage
// collection is requested.
enum GCOption {
full
}
// A <code>StepOption</code> is used to indicate which form of
// single-stepping is requested.
enum StepOption {
into
over
out
}
// A <code>TagSelector</code> is used to indicate which sets of tags
// should take precedence in a cpu profile.
enum TagSelector {
UserVM
UserOnly
VMUser
VMOnly
None
}
// A <code>MetricSelector</code> is used to indicate which list of metrics
// should be retrieved from an isolate.
enum MetricSelector {
Dart,
Native,
}