Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1694)

Unified Diff: runtime/vm/service.cc

Issue 1122503003: Display isolate message queue in Observatory debugger (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/message_test.cc ('k') | runtime/vm/service/vmservice.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service.cc
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 036bb832f9b9ae2f61ed7538a2e18acb884a27a6..0f38d611a5022a837d395075d2ca556d67fe0f8d 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -733,17 +733,26 @@ static bool GetStack(Isolate* isolate, JSONStream* js) {
const bool full = BoolParameter::Parse(js->LookupParam("full"), false);
JSONObject jsobj(js);
jsobj.AddProperty("type", "Stack");
- JSONArray jsarr(&jsobj, "frames");
+ {
+ JSONArray jsarr(&jsobj, "frames");
+
+ intptr_t num_frames = stack->Length();
+ for (intptr_t i = 0; i < num_frames; i++) {
+ ActivationFrame* frame = stack->FrameAt(i);
+ JSONObject jsobj(&jsarr);
+ frame->PrintToJSONObject(&jsobj, full);
+ // TODO(turnidge): Implement depth differently -- differentiate
+ // inlined frames.
+ jsobj.AddProperty("depth", i);
+ }
+ }
- intptr_t num_frames = stack->Length();
- for (intptr_t i = 0; i < num_frames; i++) {
- ActivationFrame* frame = stack->FrameAt(i);
- JSONObject jsobj(&jsarr);
- frame->PrintToJSONObject(&jsobj, full);
- // TODO(turnidge): Implement depth differently -- differentiate
- // inlined frames.
- jsobj.AddProperty("depth", i);
+ {
+ MessageHandler::AcquiredQueues aq;
+ isolate->message_handler()->AcquireQueues(&aq);
+ jsobj.AddProperty("messages", aq.queue());
}
+
return true;
}
@@ -1163,14 +1172,11 @@ static void PrintSentinel(JSONStream* js,
static SourceBreakpoint* LookupBreakpoint(Isolate* isolate, const char* id) {
size_t end_pos = strcspn(id, "/");
- const char* rest = NULL;
- if (end_pos < strlen(id)) {
- rest = id + end_pos + 1; // +1 for '/'.
+ if (end_pos == strlen(id)) {
+ return false;
}
+ const char* rest = id + end_pos + 1; // +1 for '/'.
if (strncmp("breakpoints", id, end_pos) == 0) {
- if (rest == NULL) {
- return NULL;
- }
intptr_t bpt_id = 0;
SourceBreakpoint* bpt = NULL;
if (GetIntegerId(rest, &bpt_id)) {
@@ -1182,6 +1188,40 @@ static SourceBreakpoint* LookupBreakpoint(Isolate* isolate, const char* id) {
}
+// Scans |isolate|'s message queue looking for a message with |id|.
+// If found, the message is printed to |js| and true is returned.
+// If not found, false is returned.
+static bool PrintMessage(JSONStream* js, Isolate* isolate, const char* id) {
+ size_t end_pos = strcspn(id, "/");
+ if (end_pos == strlen(id)) {
+ return false;
+ }
+ const char* rest = id + end_pos + 1; // +1 for '/'.
+ if (strncmp("messages", id, end_pos) == 0) {
+ uword message_id = 0;
+ if (GetUnsignedIntegerId(rest, &message_id, 16)) {
+ MessageHandler::AcquiredQueues aq;
+ isolate->message_handler()->AcquireQueues(&aq);
+ Message* message = aq.queue()->FindMessageById(message_id);
+ if (message == NULL) {
+ printf("Could not find message %" Px "\n", message_id);
+ // Not found.
+ return false;
+ }
+ SnapshotReader reader(message->data(),
+ message->len(),
+ Snapshot::kMessage,
+ isolate,
+ isolate->current_zone());
+ const Object& msg_obj = Object::Handle(reader.ReadObject());
+ msg_obj.PrintJSON(js);
+ return true;
+ } else {
+ printf("Could not get id from %s\n", rest);
+ }
+ }
+ return false;
+}
static bool PrintInboundReferences(Isolate* isolate,
@@ -2331,6 +2371,10 @@ static bool GetObject(Isolate* isolate, JSONStream* js) {
return true;
}
+ if (PrintMessage(js, isolate, id)) {
+ return true;
+ }
+
PrintError(js, "Unrecognized object id: %s\n", id);
return true;
}
« no previous file with comments | « runtime/vm/message_test.cc ('k') | runtime/vm/service/vmservice.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698