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

Unified Diff: runtime/vm/service.cc

Issue 1339713002: Add LookupHeapObjectMessage and hook into LookupHeapObject (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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 | « no previous file | runtime/vm/service/service.md » ('j') | runtime/vm/service/service.md » ('J')
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 a9eea6ae6174ca2a4e1032d023fd918a9511cfee..7f8e353fc52a570fad3f1590e997ac3eef36cd5f 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -1354,6 +1354,29 @@ static RawObject* LookupHeapObjectCode(Isolate* isolate,
}
+static RawObject* LookupHeapObjectMessage(Isolate* isolate,
+ char** parts, int num_parts) {
+ if (num_parts != 2) {
+ return Object::sentinel().raw();
+ }
+ uword message_id = 0;
+ if (!GetUnsignedIntegerId(parts[1], &message_id, 16)) {
+ return Object::sentinel().raw();
+ }
+ MessageHandler::AcquiredQueues aq;
+ isolate->message_handler()->AcquireQueues(&aq);
+ Message* message = aq.queue()->FindMessageById(message_id);
+ if (message == NULL) {
+ // The user may try to load an expired message.
+ return Object::sentinel().raw();
+ }
+ MessageSnapshotReader reader(message->data(),
+ message->len(),
+ Thread::Current());
+ return reader.ReadObject();
+}
+
+
static RawObject* LookupHeapObject(Isolate* isolate,
const char* id_original,
ObjectIdRing::LookupResult* result) {
@@ -1406,6 +1429,8 @@ static RawObject* LookupHeapObject(Isolate* isolate,
return LookupHeapObjectTypeArguments(isolate, parts, num_parts);
} else if (strcmp(parts[0], "code") == 0) {
return LookupHeapObjectCode(isolate, parts, num_parts);
+ } else if (strcmp(parts[0], "messages") == 0) {
+ return LookupHeapObjectMessage(isolate, parts, num_parts);
}
// Not found.
@@ -1461,39 +1486,6 @@ static Breakpoint* 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) {
- // The user may try to load an expired message, so we treat
- // unrecognized ids as if they are expired.
- PrintSentinel(js, kExpiredSentinel);
- return true;
- }
- MessageSnapshotReader reader(message->data(),
- message->len(),
- Thread::Current());
- const Object& msg_obj = Object::Handle(reader.ReadObject());
- msg_obj.PrintJSON(js);
- return true;
- }
- }
- return false;
-}
-
-
static bool PrintInboundReferences(Isolate* isolate,
Object* target,
intptr_t limit,
@@ -2827,10 +2819,6 @@ static bool GetObject(Isolate* isolate, JSONStream* js) {
return true;
}
- if (PrintMessage(js, isolate, id)) {
- return true;
- }
-
PrintInvalidParamError(js, "objectId");
return true;
}
« no previous file with comments | « no previous file | runtime/vm/service/service.md » ('j') | runtime/vm/service/service.md » ('J')

Powered by Google App Engine
This is Rietveld 408576698