Chromium Code Reviews| Index: runtime/vm/service.cc |
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc |
| index e68727a3c41829a1889e847403d243797df540be..3342166cbe0233b6b9b3428df0f0c52baeef3ed3 100644 |
| --- a/runtime/vm/service.cc |
| +++ b/runtime/vm/service.cc |
| @@ -87,7 +87,7 @@ StreamInfo Service::debug_stream("Debug"); |
| StreamInfo Service::gc_stream("GC"); |
| StreamInfo Service::echo_stream("_Echo"); |
| StreamInfo Service::graph_stream("_Graph"); |
| - |
| +StreamInfo Service::logging_stream("Logging"); |
| static StreamInfo* streams_[] = { |
| &Service::isolate_stream, |
| @@ -95,6 +95,7 @@ static StreamInfo* streams_[] = { |
| &Service::gc_stream, |
| &Service::echo_stream, |
| &Service::graph_stream, |
| + &Service::logging_stream, |
| }; |
| @@ -683,6 +684,16 @@ void Service::HandleEvent(ServiceEvent* event) { |
| jsobj.AddProperty("event", event); |
| jsobj.AddProperty("streamId", stream_id); |
| } |
| + PostEvent(stream_id, event->KindAsCString(), &js); |
| +} |
| + |
| + |
| +void Service::PostEvent(const char* stream_id, |
| + const char* kind, |
| + JSONStream* event) { |
| + ASSERT(stream_id != NULL); |
| + ASSERT(kind != NULL); |
| + ASSERT(event != NULL); |
| // Message is of the format [<stream id>, <json string>]. |
| // |
| @@ -702,13 +713,12 @@ void Service::HandleEvent(ServiceEvent* event) { |
| Dart_CObject json_cobj; |
| json_cobj.type = Dart_CObject_kString; |
| - json_cobj.value.as_string = const_cast<char*>(js.ToCString()); |
| + json_cobj.value.as_string = const_cast<char*>(event->ToCString()); |
| list_values[1] = &json_cobj; |
| if (FLAG_trace_service) { |
| OS::Print( |
| - "vm-service: Pushing event of type %s to stream %s\n", |
| - event->KindAsCString(), stream_id); |
| + "vm-service: Pushing event of type %s to stream %s\n", kind, stream_id); |
| } |
| Dart_PostCObject(ServiceIsolate::Port(), &list_cobj); |
| @@ -2512,6 +2522,44 @@ void Service::SendEmbedderEvent(Isolate* isolate, |
| } |
| +void Service::SendLogEvent(Isolate* isolate, |
| + int64_t sequence_number, |
| + int64_t timestamp, |
| + |
| + intptr_t level, |
| + const String& name, |
| + const String& message, |
| + const Instance& zone, |
| + const Object& error, |
| + const Instance& stack_trace) { |
|
turnidge
2015/07/17 00:19:55
Can this work like most of the other ServiceEvents
Cutch
2015/07/17 00:50:13
I deliberately didn't make this work like the othe
|
| + ServiceEvent service_event(isolate, ServiceEvent::kLogging); |
| + JSONStream js; |
| + const char* stream_id = service_event.stream_id(); |
| + ASSERT(stream_id != NULL); |
| + { |
| + JSONObject jsobj(&js); |
| + jsobj.AddProperty("streamId", stream_id); |
| + { |
| + JSONObject event(&jsobj, "event"); |
| + // Print header. |
| + service_event.PrintJSONHeader(&event); |
| + { |
| + JSONObject logRecord(&event, "logRecord"); |
| + event.AddProperty64("sequenceNumber", sequence_number); |
| + event.AddPropertyTimeMillis("time", timestamp); |
| + event.AddProperty64("level", level); |
| + event.AddProperty("loggerName", name); |
| + event.AddProperty("message", message); |
| + event.AddProperty("zone", zone); |
| + event.AddProperty("error", error); |
| + event.AddProperty("stackTrace", stack_trace); |
|
turnidge
2015/07/17 00:19:54
This stuff would move into the ServiceEvent::Print
Cutch
2015/07/17 00:50:13
Acknowledged.
|
| + } |
| + } |
| + } |
| + Service::PostEvent(stream_id, service_event.KindAsCString(), &js); |
| +} |
| + |
| + |
| class ContainsAddressVisitor : public FindObjectVisitor { |
| public: |
| ContainsAddressVisitor(Isolate* isolate, uword addr) |