Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: runtime/observatory/web/timeline.js

Issue 1525913002: Observatory: Include profiler samples in the timeline view. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: + unit test Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 function onModelLoaded() { 5 function onModelLoaded() {
6 viewer.globalMode = true; 6 viewer.globalMode = true;
7 viewer.model = model; 7 viewer.model = model;
8 } 8 }
9 9
10 function clearTimeline() { 10 function clearTimeline() {
(...skipping 22 matching lines...) Expand all
33 function fetchUri(uri, onLoad, onError) { 33 function fetchUri(uri, onLoad, onError) {
34 var xhr = new XMLHttpRequest(); 34 var xhr = new XMLHttpRequest();
35 xhr.open('GET', uri, true); 35 xhr.open('GET', uri, true);
36 xhr.responseType = 'text'; 36 xhr.responseType = 'text';
37 xhr.addEventListener("load", onLoad); 37 xhr.addEventListener("load", onLoad);
38 xhr.addEventListener("error", onError); 38 xhr.addEventListener("error", onError);
39 xhr.send(); 39 xhr.send();
40 console.log('GET ' + uri); 40 console.log('GET ' + uri);
41 } 41 }
42 42
43
44 var traceObject;
45
43 function fetchTimelineOnLoad(event) { 46 function fetchTimelineOnLoad(event) {
44 var xhr = event.target; 47 var xhr = event.target;
45 var response = JSON.parse(xhr.responseText); 48 var response = JSON.parse(xhr.responseText);
46 var result = response['result']; 49 var result = response['result'];
47 var traceEvents = result['traceEvents']; 50 var newStackFrames = result['stackFrames']; // Map.
48 updateTimeline(traceEvents); 51 var newTraceEvents = result['traceEvents']; // List.
52
53 // Merge in timeline events.
54 traceObject.traceEvents = traceObject.traceEvents.concat(newTraceEvents);
55 for (var key in newStackFrames) {
56 if (newStackFrames.hasOwnProperty(key)) {
57 traceObject.stackFrames[key] = newStackFrames[key];
58 }
59 }
60
61 updateTimeline(traceObject);
49 } 62 }
50 63
51 function fetchTimelineOnError(event) { 64 function fetchTimelineOnError(event) {
52 } 65 }
53 66
54 function fetchTimeline(vmAddress) { 67 function fetchTimeline(vmAddress, isolateIds) {
68 // Reset combined timeline.
69 traceObject = {
70 'stackFrames': {},
71 'traceEvents': []
72 };
73
55 var parser = document.createElement('a'); 74 var parser = document.createElement('a');
56 parser.href = vmAddress; 75 parser.href = vmAddress;
57 var requestUri = 'http://' + 76 var requestUri = 'http://' +
58 parser.hostname + 77 parser.hostname +
59 ':' + 78 ':' +
60 parser.port + 79 parser.port +
61 '/_getVMTimeline'; 80 '/_getVMTimeline';
62 fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError); 81 fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError);
82
83 for (var i = 0; i < isolateIds.length; i++) {
84 var isolateId = isolateIds[i];
85 var requestUri = 'http://' +
86 parser.hostname +
87 ':' +
88 parser.port +
89 '/_getCpuProfileTimeline?tags=VMUser&isolateId=' +
90 isolateId;
91 fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError);
92 }
63 } 93 }
64 94
65 function onMessage(event) { 95 function onMessage(event) {
66 var request = JSON.parse(event.data); 96 var request = JSON.parse(event.data);
67 var method = request['method']; 97 var method = request['method'];
68 var params = request['params']; 98 var params = request['params'];
69 switch (method) { 99 switch (method) {
70 case 'refresh': 100 case 'refresh':
71 fetchTimeline(params['vmAddress']); 101 fetchTimeline(params['vmAddress'], params['isolateIds']);
72 break; 102 break;
73 case 'clear': 103 case 'clear':
74 clearTimeline(); 104 clearTimeline();
75 break; 105 break;
76 default: 106 default:
77 console.log('Unknown method:' + method + '.'); 107 console.log('Unknown method:' + method + '.');
78 } 108 }
79 } 109 }
80 110
81 document.addEventListener('DOMContentLoaded', function() { 111 document.addEventListener('DOMContentLoaded', function() {
82 var container = document.createElement('track-view-container'); 112 var container = document.createElement('track-view-container');
83 container.id = 'track_view_container'; 113 container.id = 'track_view_container';
84 viewer = document.createElement('tr-ui-timeline-view'); 114 viewer = document.createElement('tr-ui-timeline-view');
85 viewer.track_view_container = container; 115 viewer.track_view_container = container;
86 viewer.appendChild(container); 116 viewer.appendChild(container);
87 viewer.id = 'trace-viewer'; 117 viewer.id = 'trace-viewer';
88 viewer.globalMode = true; 118 viewer.globalMode = true;
89 document.body.appendChild(viewer); 119 document.body.appendChild(viewer);
90 registerForMessages(); 120 registerForMessages();
91 }); 121 });
92 122
93 console.log('loaded'); 123 console.log('loaded');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698