| Index: runtime/vm/service.cc
|
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
|
| index 2799b036932f5866519b663e9ab45b9e5537baa8..c55a3c4b7289ee912d7b7aa6f1529a2ef9b7ab10 100644
|
| --- a/runtime/vm/service.cc
|
| +++ b/runtime/vm/service.cc
|
| @@ -24,6 +24,7 @@
|
| #include "vm/profiler.h"
|
| #include "vm/stack_frame.h"
|
| #include "vm/symbols.h"
|
| +#include "vm/version.h"
|
|
|
|
|
| namespace dart {
|
| @@ -634,7 +635,7 @@ void Service::HandleIsolateMessage(Isolate* isolate, const Instance& msg) {
|
|
|
|
|
| static bool HandleIsolate(Isolate* isolate, JSONStream* js) {
|
| - isolate->PrintToJSONStream(js);
|
| + isolate->PrintToJSONStream(js, false);
|
| return true;
|
| }
|
|
|
| @@ -1351,15 +1352,6 @@ static bool HandleDebug(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
|
|
| -static bool HandleCpu(Isolate* isolate, JSONStream* js) {
|
| - JSONObject jsobj(js);
|
| - jsobj.AddProperty("type", "CPU");
|
| - jsobj.AddProperty("targetCPU", CPU::Id());
|
| - jsobj.AddProperty("hostCPU", HostCPUFeatures::hardware());
|
| - return true;
|
| -}
|
| -
|
| -
|
| static bool HandleNullCode(uintptr_t pc, JSONStream* js) {
|
| // TODO(turnidge): Consider adding/using Object::null_code() for
|
| // consistent "type".
|
| @@ -1468,15 +1460,22 @@ static bool HandleAllocationProfile(Isolate* isolate, JSONStream* js) {
|
|
|
|
|
| static bool HandleResume(Isolate* isolate, JSONStream* js) {
|
| - // TODO(johnmccutchan): What do I respond with??
|
| if (isolate->message_handler()->pause_on_start()) {
|
| isolate->message_handler()->set_pause_on_start(false);
|
| + JSONObject jsobj(js);
|
| + jsobj.AddProperty("type", "Success");
|
| + jsobj.AddProperty("id", "");
|
| return true;
|
| }
|
| if (isolate->message_handler()->pause_on_exit()) {
|
| isolate->message_handler()->set_pause_on_exit(false);
|
| + JSONObject jsobj(js);
|
| + jsobj.AddProperty("type", "Success");
|
| + jsobj.AddProperty("id", "");
|
| return true;
|
| }
|
| +
|
| + PrintError(js, "VM was not paused");
|
| return true;
|
| }
|
|
|
| @@ -1546,7 +1545,6 @@ static IsolateMessageHandlerEntry isolate_handlers[] = {
|
| { "classes", HandleClasses },
|
| { "code", HandleCode },
|
| { "coverage", HandleCoverage },
|
| - { "cpu", HandleCpu },
|
| { "debug", HandleDebug },
|
| { "heapmap", HandleHeapMap },
|
| { "libraries", HandleLibraries },
|
| @@ -1649,17 +1647,51 @@ static bool HandleRootEcho(JSONStream* js) {
|
| }
|
|
|
|
|
| -static bool HandleCpu(JSONStream* js) {
|
| +class ServiceIsolateVisitor : public IsolateVisitor {
|
| + public:
|
| + explicit ServiceIsolateVisitor(JSONArray* jsarr)
|
| + : jsarr_(jsarr) {
|
| + }
|
| +
|
| + virtual ~ServiceIsolateVisitor() {}
|
| +
|
| + void VisitIsolate(Isolate* isolate) {
|
| + if (isolate != Dart::vm_isolate() && !Service::IsServiceIsolate(isolate)) {
|
| + jsarr_->AddValue(isolate);
|
| + }
|
| + }
|
| +
|
| + private:
|
| + JSONArray* jsarr_;
|
| +};
|
| +
|
| +
|
| +static bool HandleVM(JSONStream* js) {
|
| JSONObject jsobj(js);
|
| - jsobj.AddProperty("type", "CPU");
|
| + jsobj.AddProperty("type", "VM");
|
| + jsobj.AddProperty("id", "vm");
|
| jsobj.AddProperty("architecture", CPU::Id());
|
| + jsobj.AddProperty("version", Version::String());
|
| +
|
| + int64_t start_time_micros = Dart::vm_isolate()->start_time();
|
| + int64_t uptime_micros = (OS::GetCurrentTimeMicros() - start_time_micros);
|
| + double seconds = (static_cast<double>(uptime_micros) /
|
| + static_cast<double>(kMicrosecondsPerSecond));
|
| + jsobj.AddProperty("uptime", seconds);
|
| +
|
| + // Construct the isolate list.
|
| + {
|
| + JSONArray jsarr(&jsobj, "isolates");
|
| + ServiceIsolateVisitor visitor(&jsarr);
|
| + Isolate::VisitIsolates(&visitor);
|
| + }
|
| return true;
|
| }
|
|
|
|
|
| static RootMessageHandlerEntry root_handlers[] = {
|
| { "_echo", HandleRootEcho },
|
| - { "cpu", HandleCpu },
|
| + { "vm", HandleVM },
|
| };
|
|
|
|
|
|
|