Chromium Code Reviews| Index: runtime/vm/service.cc |
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc |
| index e68727a3c41829a1889e847403d243797df540be..2b7fd4c960ac43b832297d13661bc03661e6b50f 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"); |
|
rmacnak
2015/07/21 00:20:15
Switch to _Logging or add to service.md
Cutch
2015/07/21 14:51:44
Done.
|
| 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,30 @@ 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) { |
| + ServiceEvent::LogRecord log_record; |
| + log_record.sequence_number = sequence_number; |
| + log_record.timestamp = timestamp; |
| + log_record.level = level; |
| + log_record.name = &name; |
| + log_record.message = &message; |
| + log_record.zone = &zone; |
| + log_record.error = &error; |
| + log_record.stack_trace = &stack_trace; |
| + ServiceEvent event(isolate, ServiceEvent::kLogging); |
| + event.set_log_record(log_record); |
| + Service::HandleEvent(&event); |
| +} |
| + |
| + |
| class ContainsAddressVisitor : public FindObjectVisitor { |
| public: |
| ContainsAddressVisitor(Isolate* isolate, uword addr) |