OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 library vmservice; | 5 library vmservice; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:isolate'; | 9 import 'dart:isolate'; |
10 import 'dart:typed_data'; | 10 import 'dart:typed_data'; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 var members = []; | 135 var members = []; |
136 var result = {}; | 136 var result = {}; |
137 clients.forEach((client) { | 137 clients.forEach((client) { |
138 members.add(client.toJson()); | 138 members.add(client.toJson()); |
139 }); | 139 }); |
140 result['type'] = 'ClientList'; | 140 result['type'] = 'ClientList'; |
141 result['members'] = members; | 141 result['members'] = members; |
142 message.setResponse(JSON.encode(result)); | 142 message.setResponse(JSON.encode(result)); |
143 } | 143 } |
144 | 144 |
| 145 // TODO(johnmccutchan): Turn this into a command line tool that uses the |
| 146 // service library. |
145 Future<String> _getCrashDump() async { | 147 Future<String> _getCrashDump() async { |
146 final perIsolateRequests = [ | 148 final perIsolateRequests = [ |
147 // ?isolateId=<isolate id> will be appended to each of these requests. | 149 // ?isolateId=<isolate id> will be appended to each of these requests. |
148 Uri.parse('getIsolate'), // Isolate information. | 150 // Isolate information. |
149 Uri.parse('_getAllocationProfile'), // State of heap. | 151 Uri.parse('getIsolate'), |
150 Uri.parse('getStack?full=true'), // Call stack + local variables. | 152 // State of heap. |
| 153 Uri.parse('_getAllocationProfile'), |
| 154 // Call stack + local variables. |
| 155 Uri.parse('getStack?_full=true'), |
151 ]; | 156 ]; |
152 | 157 |
153 // Snapshot of running isolates. | 158 // Snapshot of running isolates. |
154 var isolates = runningIsolates.isolates.values.toList(); | 159 var isolates = runningIsolates.isolates.values.toList(); |
155 | 160 |
156 // Collect the mapping from request uris to responses. | 161 // Collect the mapping from request uris to responses. |
157 var responses = { | 162 var responses = { |
158 }; | 163 }; |
159 | 164 |
160 // Request VM. | 165 // Request VM. |
(...skipping 10 matching lines...) Expand all Loading... |
171 | 176 |
172 // Make requests to each isolate. | 177 // Make requests to each isolate. |
173 for (var isolate in isolates) { | 178 for (var isolate in isolates) { |
174 for (var request in perIsolateRequests) { | 179 for (var request in perIsolateRequests) { |
175 var message = new Message.forIsolate(request, isolate); | 180 var message = new Message.forIsolate(request, isolate); |
176 // Decode the JSON and and insert it into the map. The map key | 181 // Decode the JSON and and insert it into the map. The map key |
177 // is the request Uri. | 182 // is the request Uri. |
178 var response = JSON.decode(await isolate.route(message)); | 183 var response = JSON.decode(await isolate.route(message)); |
179 responses[message.toUri().toString()] = response['result']; | 184 responses[message.toUri().toString()] = response['result']; |
180 } | 185 } |
| 186 // Dump the object id ring requests. |
| 187 var message = |
| 188 new Message.forIsolate(Uri.parse('_dumpIdZone'), isolate); |
| 189 var response = JSON.decode(await isolate.route(message)); |
| 190 // Insert getObject requests into responses map. |
| 191 for (var object in response['result']['objects']) { |
| 192 final requestUri = |
| 193 'getObject&isolateId=${isolate.serviceId}?objectId=${object["id"]}'; |
| 194 responses[requestUri] = object; |
| 195 } |
181 } | 196 } |
182 | 197 |
183 // Encode the entire crash dump. | 198 // Encode the entire crash dump. |
184 return JSON.encode({ | 199 return JSON.encode({ |
185 'id' : null, | 200 'id' : null, |
186 'result' : responses, | 201 'result' : responses, |
187 }); | 202 }); |
188 } | 203 } |
189 | 204 |
190 Future<String> route(Message message) { | 205 Future<String> route(Message message) { |
(...skipping 21 matching lines...) Expand all Loading... |
212 } | 227 } |
213 | 228 |
214 void _registerIsolate(int port_id, SendPort sp, String name) { | 229 void _registerIsolate(int port_id, SendPort sp, String name) { |
215 var service = new VMService(); | 230 var service = new VMService(); |
216 service.runningIsolates.isolateStartup(port_id, sp, name); | 231 service.runningIsolates.isolateStartup(port_id, sp, name); |
217 } | 232 } |
218 | 233 |
219 void _onStart() native "VMService_OnStart"; | 234 void _onStart() native "VMService_OnStart"; |
220 | 235 |
221 void _onExit() native "VMService_OnExit"; | 236 void _onExit() native "VMService_OnExit"; |
OLD | NEW |