Chromium Code Reviews| Index: runtime/vm/service.cc |
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc |
| index 70d9e431d9de0df5edd1cd1b7b7b92838593d68e..f6d07e87cc9082f86ef81e8b63619d5489a69c08 100644 |
| --- a/runtime/vm/service.cc |
| +++ b/runtime/vm/service.cc |
| @@ -42,6 +42,21 @@ namespace dart { |
| DECLARE_FLAG(bool, trace_service); |
| DECLARE_FLAG(bool, trace_service_pause_events); |
| +DEFINE_FLAG(charp, vm_name, "vm", |
| + "The default name of this vm as reported by the VM service " |
| + "protocol"); |
| + |
| +// The name of this of this vm as reported by the VM service protocol. |
| +static char* vm_name = NULL; |
| + |
| + |
| +static const char* GetVMName() { |
| + if (vm_name == NULL) { |
| + return FLAG_vm_name; |
| + } |
| + return vm_name; |
| +} |
| + |
| ServiceIdZone::ServiceIdZone() { |
| } |
| @@ -91,6 +106,7 @@ Dart_ServiceStreamCancelCallback Service::stream_cancel_callback_ = NULL; |
| // These are the set of streams known to the core VM. |
| +StreamInfo Service::vm_stream("VM"); |
| StreamInfo Service::isolate_stream("Isolate"); |
| StreamInfo Service::debug_stream("Debug"); |
| StreamInfo Service::gc_stream("GC"); |
| @@ -99,6 +115,7 @@ StreamInfo Service::graph_stream("_Graph"); |
| StreamInfo Service::logging_stream("_Logging"); |
| static StreamInfo* streams_[] = { |
| + &Service::vm_stream, |
| &Service::isolate_stream, |
| &Service::debug_stream, |
| &Service::gc_stream, |
| @@ -651,13 +668,13 @@ void Service::HandleIsolateMessage(Isolate* isolate, const Array& msg) { |
| void Service::SendEvent(const char* stream_id, |
| const char* event_type, |
| const Object& event_message) { |
| - ASSERT(!ServiceIsolate::IsServiceIsolateDescendant(Isolate::Current())); |
| - if (!ServiceIsolate::IsRunning()) { |
| - return; |
| - } |
| Thread* thread = Thread::Current(); |
| Isolate* isolate = thread->isolate(); |
| ASSERT(isolate != NULL); |
| + ASSERT(!ServiceIsolate::IsServiceIsolateDescendant(isolate)); |
| + if (!ServiceIsolate::IsRunning()) { |
| + return; |
| + } |
| HANDLESCOPE(thread); |
| const Array& list = Array::Handle(Array::New(2)); |
| @@ -715,7 +732,8 @@ void Service::SendEventWithData(const char* stream_id, |
| void Service::HandleEvent(ServiceEvent* event) { |
| - if (ServiceIsolate::IsServiceIsolateDescendant(event->isolate())) { |
| + if (event->isolate() != NULL && |
| + ServiceIsolate::IsServiceIsolateDescendant(event->isolate())) { |
| return; |
| } |
| if (!ServiceIsolate::IsRunning()) { |
| @@ -2945,17 +2963,22 @@ static const MethodParameter* get_vm_params[] = { |
| }; |
| -static bool GetVM(Isolate* isolate, JSONStream* js) { |
| +void Service::PrintJSONForVM(JSONStream* js, bool ref) { |
| JSONObject jsobj(js); |
| - jsobj.AddProperty("type", "VM"); |
| + jsobj.AddProperty("type", (ref ? "@VM" : "VM")); |
| + jsobj.AddProperty("name", GetVMName()); |
| + if (ref) { |
| + return; |
| + } |
| + Isolate* vm_isolate = Dart::vm_isolate(); |
| jsobj.AddProperty("architectureBits", static_cast<intptr_t>(kBitsPerWord)); |
| jsobj.AddProperty("targetCPU", CPU::Id()); |
| jsobj.AddProperty("hostCPU", HostCPUFeatures::hardware()); |
| jsobj.AddProperty("version", Version::String()); |
| jsobj.AddProperty("pid", OS::ProcessId()); |
| - jsobj.AddProperty("_assertsEnabled", isolate->flags().asserts()); |
| - jsobj.AddProperty("_typeChecksEnabled", isolate->flags().type_checks()); |
| - int64_t start_time_millis = (Dart::vm_isolate()->start_time() / |
| + jsobj.AddProperty("_assertsEnabled", vm_isolate->flags().asserts()); |
|
Cutch
2015/10/08 20:05:27
Note that checked mode is now per-isolate.
turnidge
2015/10/08 22:15:26
Removed.
|
| + jsobj.AddProperty("_typeChecksEnabled", vm_isolate->flags().type_checks()); |
| + int64_t start_time_millis = (vm_isolate->start_time() / |
| kMicrosecondsPerMillisecond); |
| jsobj.AddPropertyTimeMillis("startTime", start_time_millis); |
| // Construct the isolate list. |
| @@ -2964,6 +2987,11 @@ static bool GetVM(Isolate* isolate, JSONStream* js) { |
| ServiceIsolateVisitor visitor(&jsarr); |
| Isolate::VisitIsolates(&visitor); |
| } |
| +} |
| + |
| + |
| +static bool GetVM(Isolate* isolate, JSONStream* js) { |
| + Service::PrintJSONForVM(js, false); |
| return true; |
| } |
| @@ -3104,6 +3132,25 @@ static bool SetName(Isolate* isolate, JSONStream* js) { |
| } |
| +static const MethodParameter* set_vm_name_params[] = { |
| + new MethodParameter("name", true), |
| + NULL, |
| +}; |
| + |
| + |
| +static bool SetVMName(Isolate* isolate, JSONStream* js) { |
| + const char* name_param = js->LookupParam("name"); |
| + free(vm_name); |
| + vm_name = strdup(name_param); |
| + if (Service::vm_stream.enabled()) { |
| + ServiceEvent event(NULL, ServiceEvent::kVMUpdate); |
| + Service::HandleEvent(&event); |
| + } |
| + PrintSuccess(js); |
| + return true; |
| +} |
| + |
| + |
| static const MethodParameter* set_trace_class_allocation_params[] = { |
| ISOLATE_PARAMETER, |
| new IdParameter("classId", true), |
| @@ -3223,6 +3270,8 @@ static ServiceMethodDescriptor service_methods_[] = { |
| set_name_params }, |
| { "_setTraceClassAllocation", SetTraceClassAllocation, |
| set_trace_class_allocation_params }, |
| + { "setVMName", SetVMName, |
| + set_vm_name_params }, |
| }; |