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 // Used to delay the initial timeline load until the timeline has finished |
| 6 // loading. |
| 7 timeline_loaded = false; |
| 8 timeline_vm_address = undefined; |
| 9 timeline_isolates = undefined; |
| 10 |
| 11 function registerForMessages() { |
| 12 window.addEventListener("message", onMessage, false); |
| 13 } |
| 14 |
| 15 registerForMessages(); |
| 16 |
5 function onModelLoaded() { | 17 function onModelLoaded() { |
6 viewer.globalMode = true; | 18 viewer.globalMode = true; |
7 viewer.model = model; | 19 viewer.model = model; |
8 } | 20 } |
9 | 21 |
10 function clearTimeline() { | 22 function clearTimeline() { |
11 viewer.model = undefined; | 23 viewer.model = undefined; |
12 } | 24 } |
13 | 25 |
14 function onImportFail() { | 26 function onImportFail() { |
15 var overlay = new tr.ui.b.Overlay(); | 27 var overlay = new tr.ui.b.Overlay(); |
16 overlay.textContent = tr.b.normalizeException(err).message; | 28 overlay.textContent = tr.b.normalizeException(err).message; |
17 overlay.title = 'Import error'; | 29 overlay.title = 'Import error'; |
18 overlay.visible = true; | 30 overlay.visible = true; |
19 console.log('import failed'); | 31 console.log('import failed'); |
20 } | 32 } |
21 | 33 |
22 function updateTimeline(events) { | 34 function updateTimeline(events) { |
23 model = new tr.Model(); | 35 model = new tr.Model(); |
24 var importer = new tr.importer.Import(model); | 36 var importer = new tr.importer.Import(model); |
25 var p = importer.importTracesWithProgressDialog([events]); | 37 var p = importer.importTracesWithProgressDialog([events]); |
26 p.then(onModelLoaded, onImportFail); | 38 p.then(onModelLoaded, onImportFail); |
27 } | 39 } |
28 | 40 |
29 function registerForMessages() { | 41 |
30 window.addEventListener("message", onMessage, false); | |
31 } | |
32 | 42 |
33 function fetchUri(uri, onLoad, onError) { | 43 function fetchUri(uri, onLoad, onError) { |
34 var xhr = new XMLHttpRequest(); | 44 var xhr = new XMLHttpRequest(); |
35 xhr.open('GET', uri, true); | 45 xhr.open('GET', uri, true); |
36 xhr.responseType = 'text'; | 46 xhr.responseType = 'text'; |
37 xhr.addEventListener("load", onLoad); | 47 xhr.addEventListener("load", onLoad); |
38 xhr.addEventListener("error", onError); | 48 xhr.addEventListener("error", onError); |
39 xhr.send(); | 49 xhr.send(); |
40 console.log('GET ' + uri); | 50 console.log('GET ' + uri); |
41 } | 51 } |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 }); | 199 }); |
190 inputElement.click(); | 200 inputElement.click(); |
191 } | 201 } |
192 | 202 |
193 function onMessage(event) { | 203 function onMessage(event) { |
194 var request = JSON.parse(event.data); | 204 var request = JSON.parse(event.data); |
195 var method = request['method']; | 205 var method = request['method']; |
196 var params = request['params']; | 206 var params = request['params']; |
197 switch (method) { | 207 switch (method) { |
198 case 'refresh': | 208 case 'refresh': |
199 fetchTimeline(params['vmAddress'], params['isolateIds']); | 209 if (!timeline_loaded) { |
| 210 timeline_vm_address = params['vmAddress']; |
| 211 timeline_isolates = params['isolateIds']; |
| 212 console.log('Delaying timeline refresh until loaded.'); |
| 213 } else { |
| 214 fetchTimeline(params['vmAddress'], params['isolateIds']); |
| 215 } |
200 break; | 216 break; |
201 case 'clear': | 217 case 'clear': |
202 clearTimeline(); | 218 clearTimeline(); |
203 break; | 219 break; |
204 case 'save': | 220 case 'save': |
205 saveTimeline(); | 221 saveTimeline(); |
206 break; | 222 break; |
207 case 'load': | 223 case 'load': |
208 loadTimeline(); | 224 loadTimeline(); |
209 break; | 225 break; |
210 default: | 226 default: |
211 console.log('Unknown method:' + method + '.'); | 227 console.log('Unknown method:' + method + '.'); |
212 } | 228 } |
213 } | 229 } |
214 | 230 |
215 document.addEventListener('DOMContentLoaded', function() { | 231 document.addEventListener('DOMContentLoaded', function() { |
216 var container = document.createElement('track-view-container'); | 232 var container = document.createElement('track-view-container'); |
217 container.id = 'track_view_container'; | 233 container.id = 'track_view_container'; |
218 viewer = document.createElement('tr-ui-timeline-view'); | 234 viewer = document.createElement('tr-ui-timeline-view'); |
219 viewer.track_view_container = container; | 235 viewer.track_view_container = container; |
220 viewer.appendChild(container); | 236 viewer.appendChild(container); |
221 viewer.id = 'trace-viewer'; | 237 viewer.id = 'trace-viewer'; |
222 viewer.globalMode = true; | 238 viewer.globalMode = true; |
223 document.body.appendChild(viewer); | 239 document.body.appendChild(viewer); |
224 registerForMessages(); | 240 timeline_loaded = true; |
| 241 if (timeline_vm_address != undefined) { |
| 242 console.log('Triggering delayed timeline refresh.'); |
| 243 fetchTimeline(timeline_vm_address, timeline_isolates); |
| 244 timeline_vm_address = undefined; |
| 245 timeline_isolates = undefined; |
| 246 } |
225 }); | 247 }); |
226 | 248 |
227 console.log('loaded'); | 249 console.log('loaded'); |
OLD | NEW |