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 |