Index: runtime/vm/isolate.cc |
=================================================================== |
--- runtime/vm/isolate.cc (revision 18591) |
+++ runtime/vm/isolate.cc (working copy) |
@@ -627,4 +627,40 @@ |
} |
} |
+ |
+char* Isolate::GetStatus(const char* request) { |
+ char* p = const_cast<char*>(request); |
+ const char* service_type = "/isolate/"; |
+ ASSERT(strncmp(p, service_type, strlen(service_type)) == 0); |
+ p += strlen(service_type); |
+ |
+ // Extract isolate handle. |
+ int64_t addr; |
+ OS::StringToInt64(p, &addr); |
+ Isolate* isolate = reinterpret_cast<Isolate*>(addr); |
+ Heap* heap = isolate->heap(); |
+ |
+ char buffer[256]; |
+ int n = OS::SNPrint(buffer, 256, "{\n" |
+ " \"name\": \"%s\",\n" |
+ " \"port\": %lld,\n" |
+ " \"starttime\": %lld,\n" |
+ " \"stacklimit\": %d,\n" |
+ " \"newspace\": {\n" |
+ " \"used\": %d,\n" |
+ " \"capacity\": %d\n" |
+ " },\n" |
+ " \"oldspace\": {\n" |
+ " \"used\": %d,\n" |
+ " \"capacity\": %d\n" |
+ " }\n" |
+ "}", |
+ isolate->name(), isolate->main_port(), |
+ (isolate->start_time() / 1000), isolate->saved_stack_limit(), |
+ heap->Used(Heap::kNew) / KB, heap->Capacity(Heap::kNew) / KB, |
+ heap->Used(Heap::kOld) / KB, heap->Capacity(Heap::kOld) / KB); |
+ ASSERT(n < 256); |
+ return strdup(buffer); |
+} |
+ |
} // namespace dart |