| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/service_event.h" | 5 #include "vm/service_event.h" |
| 6 | 6 |
| 7 #include "vm/message_handler.h" | 7 #include "vm/message_handler.h" |
| 8 | 8 |
| 9 namespace dart { | 9 namespace dart { |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 } | 35 } |
| 36 | 36 |
| 37 | 37 |
| 38 ServiceEvent::ServiceEvent(Isolate* isolate, EventKind event_kind) | 38 ServiceEvent::ServiceEvent(Isolate* isolate, EventKind event_kind) |
| 39 : isolate_(isolate), | 39 : isolate_(isolate), |
| 40 kind_(event_kind), | 40 kind_(event_kind), |
| 41 embedder_kind_(NULL), | 41 embedder_kind_(NULL), |
| 42 embedder_stream_id_(NULL), | 42 embedder_stream_id_(NULL), |
| 43 breakpoint_(NULL), | 43 breakpoint_(NULL), |
| 44 top_frame_(NULL), | 44 top_frame_(NULL), |
| 45 timeline_event_block_(NULL), |
| 45 extension_rpc_(NULL), | 46 extension_rpc_(NULL), |
| 46 exception_(NULL), | 47 exception_(NULL), |
| 47 at_async_jump_(false), | 48 at_async_jump_(false), |
| 48 inspectee_(NULL), | 49 inspectee_(NULL), |
| 49 gc_stats_(NULL), | 50 gc_stats_(NULL), |
| 50 bytes_(NULL), | 51 bytes_(NULL), |
| 51 bytes_length_(0), | 52 bytes_length_(0), |
| 52 timestamp_(OS::GetCurrentTimeMillis()) { | 53 timestamp_(OS::GetCurrentTimeMillis()) { |
| 53 if ((event_kind == ServiceEvent::kPauseStart) || | 54 if ((event_kind == ServiceEvent::kPauseStart) || |
| 54 (event_kind == ServiceEvent::kPauseExit)) { | 55 (event_kind == ServiceEvent::kPauseExit)) { |
| 55 timestamp_ = isolate->message_handler()->paused_timestamp(); | 56 timestamp_ = isolate->message_handler()->paused_timestamp(); |
| 56 } else if (event_kind == ServiceEvent::kResume) { | 57 } else if (event_kind == ServiceEvent::kResume) { |
| 57 timestamp_ = isolate->last_resume_timestamp(); | 58 timestamp_ = isolate->last_resume_timestamp(); |
| 58 } | 59 } |
| 59 } | 60 } |
| 60 | 61 |
| 61 | 62 |
| 62 ServiceEvent::ServiceEvent(const DebuggerEvent* debugger_event) | 63 ServiceEvent::ServiceEvent(const DebuggerEvent* debugger_event) |
| 63 : isolate_(debugger_event->isolate()), | 64 : isolate_(debugger_event->isolate()), |
| 64 kind_(TranslateEventKind(debugger_event->type())), | 65 kind_(TranslateEventKind(debugger_event->type())), |
| 65 breakpoint_(NULL), | 66 breakpoint_(NULL), |
| 66 top_frame_(NULL), | 67 top_frame_(NULL), |
| 68 timeline_event_block_(NULL), |
| 67 extension_rpc_(NULL), | 69 extension_rpc_(NULL), |
| 68 exception_(NULL), | 70 exception_(NULL), |
| 69 at_async_jump_(false), | 71 at_async_jump_(false), |
| 70 inspectee_(NULL), | 72 inspectee_(NULL), |
| 71 gc_stats_(NULL), | 73 gc_stats_(NULL), |
| 72 bytes_(NULL), | 74 bytes_(NULL), |
| 73 bytes_length_(0), | 75 bytes_length_(0), |
| 74 timestamp_(OS::GetCurrentTimeMillis()) { | 76 timestamp_(OS::GetCurrentTimeMillis()) { |
| 75 DebuggerEvent::EventType type = debugger_event->type(); | 77 DebuggerEvent::EventType type = debugger_event->type(); |
| 76 if (type == DebuggerEvent::kBreakpointReached) { | 78 if (type == DebuggerEvent::kBreakpointReached) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 case kEmbedder: | 132 case kEmbedder: |
| 131 return embedder_kind(); | 133 return embedder_kind(); |
| 132 case kLogging: | 134 case kLogging: |
| 133 return "_Logging"; | 135 return "_Logging"; |
| 134 case kDebuggerSettingsUpdate: | 136 case kDebuggerSettingsUpdate: |
| 135 return "_DebuggerSettingsUpdate"; | 137 return "_DebuggerSettingsUpdate"; |
| 136 case kIllegal: | 138 case kIllegal: |
| 137 return "Illegal"; | 139 return "Illegal"; |
| 138 case kExtension: | 140 case kExtension: |
| 139 return "Extension"; | 141 return "Extension"; |
| 142 case kTimelineEvents: |
| 143 return "TimelineEvents"; |
| 140 default: | 144 default: |
| 141 UNREACHABLE(); | 145 UNREACHABLE(); |
| 142 return "Unknown"; | 146 return "Unknown"; |
| 143 } | 147 } |
| 144 } | 148 } |
| 145 | 149 |
| 146 | 150 |
| 147 const char* ServiceEvent::stream_id() const { | 151 const char* ServiceEvent::stream_id() const { |
| 148 switch (kind()) { | 152 switch (kind()) { |
| 149 case kVMUpdate: | 153 case kVMUpdate: |
| (...skipping 24 matching lines...) Expand all Loading... |
| 174 | 178 |
| 175 case kEmbedder: | 179 case kEmbedder: |
| 176 return embedder_stream_id_; | 180 return embedder_stream_id_; |
| 177 | 181 |
| 178 case kLogging: | 182 case kLogging: |
| 179 return Service::logging_stream.id(); | 183 return Service::logging_stream.id(); |
| 180 | 184 |
| 181 case kExtension: | 185 case kExtension: |
| 182 return Service::extension_stream.id(); | 186 return Service::extension_stream.id(); |
| 183 | 187 |
| 188 case kTimelineEvents: |
| 189 return Service::timeline_stream.id(); |
| 190 |
| 184 default: | 191 default: |
| 185 UNREACHABLE(); | 192 UNREACHABLE(); |
| 186 return NULL; | 193 return NULL; |
| 187 } | 194 } |
| 188 } | 195 } |
| 189 | 196 |
| 190 | 197 |
| 191 void ServiceEvent::PrintJSON(JSONStream* js) const { | 198 void ServiceEvent::PrintJSON(JSONStream* js) const { |
| 192 JSONObject jsobj(js); | 199 JSONObject jsobj(js); |
| 193 PrintJSONHeader(&jsobj); | 200 PrintJSONHeader(&jsobj); |
| 194 if (kind() == kServiceExtensionAdded) { | 201 if (kind() == kServiceExtensionAdded) { |
| 195 ASSERT(extension_rpc_ != NULL); | 202 ASSERT(extension_rpc_ != NULL); |
| 196 jsobj.AddProperty("extensionRPC", extension_rpc_->ToCString()); | 203 jsobj.AddProperty("extensionRPC", extension_rpc_->ToCString()); |
| 197 } | 204 } |
| 198 if (kind() == kPauseBreakpoint) { | 205 if (kind() == kPauseBreakpoint) { |
| 199 JSONArray jsarr(&jsobj, "pauseBreakpoints"); | 206 JSONArray jsarr(&jsobj, "pauseBreakpoints"); |
| 200 // TODO(rmacnak): If we are paused at more than one breakpoint, | 207 // TODO(rmacnak): If we are paused at more than one breakpoint, |
| 201 // provide it here. | 208 // provide it here. |
| 202 if (breakpoint() != NULL) { | 209 if (breakpoint() != NULL) { |
| 203 jsarr.AddValue(breakpoint()); | 210 jsarr.AddValue(breakpoint()); |
| 204 } | 211 } |
| 205 } else { | 212 } else { |
| 206 if (breakpoint() != NULL) { | 213 if (breakpoint() != NULL) { |
| 207 jsobj.AddProperty("breakpoint", breakpoint()); | 214 jsobj.AddProperty("breakpoint", breakpoint()); |
| 208 } | 215 } |
| 209 } | 216 } |
| 217 if (kind() == kTimelineEvents) { |
| 218 jsobj.AddProperty("timelineEvents", timeline_event_block_); |
| 219 } |
| 210 if (kind() == kDebuggerSettingsUpdate) { | 220 if (kind() == kDebuggerSettingsUpdate) { |
| 211 JSONObject jssettings(&jsobj, "_debuggerSettings"); | 221 JSONObject jssettings(&jsobj, "_debuggerSettings"); |
| 212 isolate()->debugger()->PrintSettingsToJSONObject(&jssettings); | 222 isolate()->debugger()->PrintSettingsToJSONObject(&jssettings); |
| 213 } | 223 } |
| 214 if ((top_frame() != NULL) && Isolate::Current()->compilation_allowed()) { | 224 if ((top_frame() != NULL) && Isolate::Current()->compilation_allowed()) { |
| 215 JSONObject jsFrame(&jsobj, "topFrame"); | 225 JSONObject jsFrame(&jsobj, "topFrame"); |
| 216 top_frame()->PrintToJSONObject(&jsFrame); | 226 top_frame()->PrintToJSONObject(&jsFrame); |
| 217 intptr_t index = 0; // Avoid ambiguity in call to AddProperty. | 227 intptr_t index = 0; // Avoid ambiguity in call to AddProperty. |
| 218 jsFrame.AddProperty("index", index); | 228 jsFrame.AddProperty("index", index); |
| 219 } | 229 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 | 264 |
| 255 void ServiceEvent::PrintJSONHeader(JSONObject* jsobj) const { | 265 void ServiceEvent::PrintJSONHeader(JSONObject* jsobj) const { |
| 256 ASSERT(jsobj != NULL); | 266 ASSERT(jsobj != NULL); |
| 257 jsobj->AddProperty("type", "Event"); | 267 jsobj->AddProperty("type", "Event"); |
| 258 jsobj->AddProperty("kind", KindAsCString()); | 268 jsobj->AddProperty("kind", KindAsCString()); |
| 259 if (kind() == kExtension) { | 269 if (kind() == kExtension) { |
| 260 ASSERT(extension_event_.event_kind != NULL); | 270 ASSERT(extension_event_.event_kind != NULL); |
| 261 jsobj->AddProperty("extensionKind", | 271 jsobj->AddProperty("extensionKind", |
| 262 extension_event_.event_kind->ToCString()); | 272 extension_event_.event_kind->ToCString()); |
| 263 } | 273 } |
| 264 if (kind() == kVMUpdate) { | 274 if (isolate() == NULL) { |
| 265 jsobj->AddPropertyVM("vm"); | 275 jsobj->AddPropertyVM("vm"); |
| 266 } else { | 276 } else { |
| 267 jsobj->AddProperty("isolate", isolate()); | 277 jsobj->AddProperty("isolate", isolate()); |
| 268 } | 278 } |
| 269 ASSERT(timestamp_ != -1); | 279 ASSERT(timestamp_ != -1); |
| 270 jsobj->AddPropertyTimeMillis("timestamp", timestamp_); | 280 jsobj->AddPropertyTimeMillis("timestamp", timestamp_); |
| 271 } | 281 } |
| 272 | 282 |
| 273 #endif // !PRODUCT | 283 #endif // !PRODUCT |
| 274 | 284 |
| 275 } // namespace dart | 285 } // namespace dart |
| OLD | NEW |