Commit Graph

242 Commits

Author SHA1 Message Date
John McCutchan ae57de89d1 Force disconnect all service clients when VM is shutting down
BUG=https://github.com/dart-lang/sdk/issues/24352
R=turnidge@google.com

Review URL: https://codereview.chromium.org//1338753004 .
2015-09-15 12:47:28 -07:00
Todd Turnidge b0ca0789be Fix a variety of service protocol bugs.
Add documentation for breakpoint.

Fix Instance.pattern documentation.

Fix Instance.bytes documentation.

Add class field for null instances.

Fix documentation of Context and closureContext.

Make getObject return Collected for deleted breakpoints.

Closes #24247
Closes #24249
Closes #24309
Closes #24325
Closes #24326
Closes #24327

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1341473002 .
2015-09-11 12:29:21 -07:00
John McCutchan fdf79d85a2 Add LookupHeapObjectMessage and hook into LookupHeapObject
- This makes isolate messages behave like other instances over the service protocol.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1339713002 .
2015-09-11 10:22:40 -07:00
Todd Turnidge dee6ddf966 Support column-based breakpoints in the VM and Observatory.
BUG=
R=hausner@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org//1312763010 .
2015-09-09 09:01:13 -07:00
Todd Turnidge 7ac3150ee3 Improve display of simd vector types and stack traces in Observatory.
Associated protocol changes.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1316123004 .
2015-08-31 10:35:01 -07:00
John McCutchan d0882dd363 Remember when an isolate was paused and subtly display it in Obseravatory
- Display paused time as tooltip over "paused" word.
- Send a timestamp with every ServiceEvent.
- Unit tests verifying that paused on start, exit, and breakpoint timestamps are stable.
- Remember the pause time in DebuggerEvent.
- Remember the pause time in MessageHandler.
- Updated service protocol documentation.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1311503004 .
2015-08-26 10:57:59 -07:00
Todd Turnidge 7e8bb130f2 Add an IsolateRunnable event to the service protocol. Improve service docs.
Closes #24140

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1293383011 .
2015-08-21 10:25:38 -07:00
Todd Turnidge 40c3c3862f Fix documentation for Class.{finalized,implemented,path}.
We had decided to make them private but forgotten to update the docs.

Closes #24162

Review URL: https://codereview.chromium.org//1306223002 .
2015-08-21 09:53:53 -07:00
Todd Turnidge 0706f6de29 Fix the error response for bad isolate ids, etc.
BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1297313005 .
2015-08-20 12:58:28 -07:00
Todd Turnidge bfd59ed799 Fix some errors in service.md.
BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1304803002 .
2015-08-20 11:00:23 -07:00
Ryan Macnak 3851c8c0ed Add Regex isCaseSensitive and isMultiLine to the service protocol and Observatory.
BUG=http://dartbug.com/24039
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1284063003 .
2015-08-13 15:50:02 -07:00
John McCutchan 590557dfd0 When no service response is requested, send null back to the service isolate so it can cleanup
BUG=
R=turnidge@google.com

Review URL: https://codereview.chromium.org//1285673003 .
2015-08-11 07:13:09 -07:00
Natalie Weizenbaum 1b7c33a5b5 Bump the VM service protocol version to 2.0.
This reflects the breaking changes since version 1.0, which was released
in Dart 1.11. It also gets rid of the "draft" language in the VM service
protocol documentation, since it will be (and has been) shipped in a
stable Dart release.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1270603003 .
2015-08-03 14:58:51 -07:00
John McCutchan fc2d849cd5 Fix http requests and the crash dump RPC
- Fix HTTP and crash dump service requests by giving them a non-null id.
- Add basic heartbeat test for _getCrashDump RPC over HTTP.
- Fix some analyzer warnings.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1266943005 .
2015-07-31 14:38:04 -07:00
Natalie Weizenbaum 61ea0618ce Support JSON-RPC 2.0-compatible VM service events.
This adds a parameter to streamListen that will cause it to produce JSON-RPC
2.0-compatible events.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1257943003 .
2015-07-28 17:17:40 -07:00
Natalie Weizenbaum 4153313dfd Make VM service id handling JSON-RPC 2 compliant.
* Numeric ids will not be converted to strings.

* String ids will be escaped, so an id of '"' doesn't produce invalid
  JSON.

* List or map ids will be rejected.

* Null ids will produce no response.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1255003003 .
2015-07-27 16:14:34 -07:00
Natalie Weizenbaum cf0955a83e Include a "jsonrpc" property in all VM service responses.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1258733004 .
2015-07-27 11:10:16 -07:00
Natalie Weizenbaum a2fd202314 Use a "jsonrpc" field rather than "json-rpc" in the VM service.
This matches the JSON-RPC 2.0 spec:
http://www.jsonrpc.org/specification#response_object

While this is technically a breaking change, it seems very unlikely that
any consumers were validating this form of the parameter. The
documentation was already inconsistent about whether it was hyphenated,
and the only code likely to be using would be written against the
JSON-RPC 2.0 spec itself, and would reject the old format anyway.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1256023003 .
2015-07-24 13:29:02 -07:00
Todd Turnidge e4684c7627 Provide stdout and stderr output in the Observatory debugger.
Implement two new streams, 'Stdout' and 'Stderr' in the service protocol.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1232193003 .
2015-07-14 12:54:07 -07:00
Devon Carew 969d882e6e Fixes to the service.md doc. Various minor changes discovered while
parsing the file.

BUG=
R=turnidge@google.com

Review URL: https://codereview.chromium.org//1220713008.
2015-06-29 19:57:28 -07:00
Todd Turnidge e8cc98c563 Do not use the bogus @Type in service.md.
BUG=23744
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1219723003.
2015-06-29 17:16:20 -07:00
Ryan Macnak 69938db31a Include pattern and functions for RegExps over the service protocol.
Remove some quadratic behavior from processing/display of Code in Observatory, so we can actually look at 300k regexp instructions.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1208153002.
2015-06-25 12:56:59 -07:00
John McCutchan 983395f5f3 Misc service fixes
BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1202583002.
2015-06-22 13:59:23 -07:00
Ryan Macnak 304382c1b4 Add TypedData instance kinds.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1157003003.
2015-06-08 17:30:11 -07:00
Todd Turnidge 676fcddbff @Int no longer exists 2015-06-04 14:07:03 -07:00
Seth Ladd 8e3bc82c85 Tweak to markdown for link in service protocol spec 2015-06-04 12:47:09 -07:00
Todd Turnidge d5dc5ccc56 Add feedback link.
BUG=
R=sethladd@google.com

Review URL: https://codereview.chromium.org//1159983007
2015-06-04 10:19:40 -07:00
Todd Turnidge 996f012707 2nd attempt at adding streamListen/streamCancel to the service protocol.
This time I am committing the protocol changes first and saving the
Observatory changes for a second cl.

------

We currently support 5 streams: Isolate, Debug, GC, _Echo, and _Graph.

Only generate events when at least one client is listening to the
corresponding event stream.

Only send events to the clients that actually request them.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1166433008
2015-06-04 09:57:22 -07:00
Todd Turnidge 1b59b9ea06 Service cleanups...
- Allow for multiple breakpoints in the service protocol.
  The info isn't actually provided or used yet.
- Drop index for list elements returned by the protocol.  Flatten structure.
- Drop index for context elements.  Keep sub-structure so we
   can choose to add extra slot info later.
- Errors now have ids and kinds.
- exception and stacktrace move from @Error to Error.
- All heap Objects now include class/size.
- Changed BoundedType.type and TypeRef.type to different names.
  Turns out we already have a "type" property that conflicts.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1152753005
2015-06-04 09:09:22 -07:00
Todd Turnidge 4a3b6fe160 Rework the format of the FlagList response.
BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1149403007
2015-06-03 10:09:15 -07:00
Todd Turnidge 6c2ebfcc60 Switch to using SourceLocation universally in service protocol.
Add <location-link> and <location-inset> to provide links and insets
for a location.

Make Frame, Message, and SourceLocation first class in service lib.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1150303004
2015-06-03 09:02:40 -07:00
Ryan Macnak eca0d72abe Provide a logical view of VM-internal maps in Observatory.
BUG=http://dartbug.com/20551
BUG=http://dartbug.com/21185
R=koda@google.com

Review URL: https://codereview.chromium.org//1150103005
2015-06-02 11:38:39 -07:00
Todd Turnidge f6d3d4681d Rename some service protocol errors.
BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1164463005
2015-06-01 09:26:54 -07:00
Todd Turnidge 8adf7de6d1 Introduce Instance.kind.
Use this instead of subclassing Instance in the service protocol.

Revise many instance property names.

BUG=
R=johnmccutchan@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org//1162133002
2015-05-29 13:02:36 -07:00
Todd Turnidge 67adc6102d Add getVersion and setLibraryDebuggable RPCs to the service protocol.
BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1149373006
2015-05-28 13:34:23 -07:00
Ryan Macnak 2764bcefba Give structured information about imports and export in the service's library response.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1160943002
2015-05-28 11:37:20 -07:00
Todd Turnidge ab6b2218b0 Standardize on using "kind" to distinguish sub-varieties of a type.
- Event.eventType -> Event.kind.
- Sentinel.id -> Sentinel.kind.

We were already doing this for Code and will do so for Instance in
an upcoming cl.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1153193006
2015-05-28 11:04:32 -07:00
Todd Turnidge 3d02f21309 Service protocol cleanups.
- ServiceEvent -> Event, protocol only.
- Use camel-case for StepOption
- Hide FlagType but make it camel-case too.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1156803003
2015-05-28 10:24:09 -07:00
Todd Turnidge 563083696c Sundry service protocol cleanups before version 1.0.
Frame.depth -> Frame.index
Message.depth -> Message.index
Remove Message.type
Message.priority becomes private
frame -> frameIndex for evaluateInFrame
Class.finalized, Class.implemented, Class.patch Class.allocationStats become private
Instance.nativeFields becomes private
Field.value moves out of "ref" into full object
Field.value -> Field.staticValue
Move Function.static, Function.const to "ref"
Make Script.kind private in docs
Make Function.kind private

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1160873002
2015-05-28 09:30:55 -07:00
Todd Turnidge 95dc56e27e Make several service protocol RPCs private.
BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1159003002
2015-05-27 11:25:56 -07:00
Ryan Macnak dfee2bf45d Mark script kinds as private in the service protocol.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1158863002
2015-05-27 09:28:19 -07:00
John McCutchan b7534facef Include 'fixedId' key when printing service ids
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1157173005
2015-05-26 16:56:31 -07:00
Ryan Macnak 1fa8c92f31 Libraries have uris not urls. Scripts have uris not names.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1154163004
2015-05-26 16:03:05 -07:00
Todd Turnidge 8d24372339 Revert "Add the streamListen and streamCancel rpcs to the vm service."
This reverts commit 0967b63073.

Conflicts:
	runtime/observatory/tests/service/graph_test.dart
	runtime/vm/service.cc

BUG=

Review URL: https://codereview.chromium.org//1152283005
2015-05-26 15:22:39 -07:00
Todd Turnidge aa3f983084 Add service.md.
This is a revised description of the service protocol.  This replaces
protocol.md and service.idl.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1159553006
2015-05-26 13:56:33 -07:00
Todd Turnidge 0967b63073 Add the streamListen and streamCancel rpcs to the vm service.
We currently support 5 streams: Isolate, Debug, GC, _Echo, and _Graph.

    Only generate events when at least one client is listening to the
    corresponding event stream.

    Only send events to the clients that actually request them.

    Implement this all as Dart streams in the service lib.

    Update tests.  Fix a race in async_generator_..._test that was biting me.

Review URL: https://codereview.chromium.org//1143783003
2015-05-26 13:52:35 -07:00
johnmccutchan@google.com f4c3119a2e Add Service ID zones to service protocol
- Add ServiceIdZone interface for getting temporary ids.
- Add RingServiceIdZone which uses the isolate's object id ring.
- Add GrowableServiceIdZone which uses a growable array.
- Unit tests for ServiceIdZones.
- JSONStream has a service id zone.
- Default service id zone is ring with eager id allocation.
- All service RPCs can include a _serviceIdZone parameter.
- Value of _serviceIdZone can be Ring.NewId or Ring.ExistingId.
- All ObjectIdRing usage in object.cc has been replaced with `jsobj.AddServiceId("id", *this);`
- Add a policy for id reuse to ObjectIdRing::GetIdForObject
- ObjectIdRing can dump its contents to JSON.
- Add _dumpRingRequests RPC which dumps the isolate's ring.
- _getCrashDump includes complete object id ring.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1132323002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45754 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-12 23:48:01 +00:00
johnmccutchan@google.com 2f7cff7170 Display isolate message queue in Observatory debugger
- Log the parameters to RPCs
- Display messages like stack frames
    - handler function and script visible
    - message preview instead of local variables
- Expanded and previewed messages do not collapse when stepping within the existing message
- Mark patch classes as finalized to avoid ASSERT on class_finalizer.cc:2358 **
- Support iterating over message queues
- Support printing the message queue as JSON
- Inhibit OOB messages from being handled if we are iterating over the message queue
    - avoids dead lock when looking up port handler (done in Dart code with message handler locked) and a stack overflow trigger to handle OOB messages
- make getObject understand message ids
- Fix dartbug.com/23355

** Need to discuss with Ivan and Matthias (reviewed code differs from committed code but matches my fix):
https://codereview.chromium.org//828353002
https://code.google.com/p/dart/source/detail?r=42612

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1122503003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45505 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-04 20:20:44 +00:00
johnmccutchan@google.com 583f48a132 Add crash dumps to service protocol and Observatory
- Add _getCrashDump RPC
- crash dump service response is map of request uris to responses, includes:
  -- getVM
  -- getFlagList
  -- for each isolate:
      -- getIsolate
      -- _getAllocationProfile
      -- getStack
- Add FakeVM to service library
- Add load crash dump to Observatory connect page
- Removes old chromium target support from connect page
- Make debugger page display stack even if libraries can't be loaded
- Fix reload of vm-connect page
- Fix polymer initialization calls

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1100583006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45390 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-24 00:08:07 +00:00
turnidge@google.com d9f65329c3 Do not JSON encode the 'result' of a service rpc.
Before a response looked like this...

{ result:<string> id:* }

...where result was always a json encoded string.  This meant that
users of the service protocol had to json decode both the outer
message and the result, which was silly.

Now a response looks like this:

{ result:<map> id:* }

This means that users of the service protocol only need to decode once.

We have changed event formats as well.  Previously, an event looked like this:

{ result:<string> }

(Essentially a result without an id.)  The result was json encoded,
requiring the user to double-decode.

Now an event looks like this:

{ event:<map> }

This allows us to distinguish events from rpc results and avoids
double-decoding.  It also avoids having an id-less rpc result mistaken
for an event.

------------

Some details and associated changes:

- Unify GCEvent and ServiceEvent in the VM.

- Move sequence number handling out of dart code and into JSONStream
  in the VM.  Plumbing.  I needed to do this to avoid double-encoding.
  Some of the dart code gets a bit simpler.

- Update C++ tests to have a sequence number.

- Change format of method/params used in Error responses to be more json-y.

- Strip out double decoding in the service lib.

- Improvements to tests.  I was running into some races and other issues.

- Fail fast when we run into a message decoding problem.  Instead of
  returning a service exception, we now disconnect from the vm.

- VMDisconnected => ConnectionClosed.

- Add some support for a reason string when disconnecting from the vm
  in the service library.

Review URL: https://codereview.chromium.org//1093043004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45378 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-23 17:55:08 +00:00