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

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: 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 var pendingRequests;
46
47 function gotReponse() {
48 pendingRequests--;
49 if (pendingRequests == 0) {
50 console.log("Got all timeline parts");
51 updateTimeline(traceObject);
52 }
53 }
54
43 function fetchTimelineOnLoad(event) { 55 function fetchTimelineOnLoad(event) {
44 var xhr = event.target; 56 var xhr = event.target;
45 var response = JSON.parse(xhr.responseText); 57 var response = JSON.parse(xhr.responseText);
46 var result = response['result']; 58 var result = response['result'];
47 var traceEvents = result['traceEvents']; 59 var newStackFrames = result['stackFrames']; // Map.
48 updateTimeline(traceEvents); 60 var newTraceEvents = result['traceEvents']; // List.
61
62 // Merge in timeline events.
63 traceObject.traceEvents = traceObject.traceEvents.concat(newTraceEvents);
64 for (var key in newStackFrames) {
65 if (newStackFrames.hasOwnProperty(key)) {
66 traceObject.stackFrames[key] = newStackFrames[key];
67 }
68 }
69
70 gotReponse();
49 } 71 }
50 72
51 function fetchTimelineOnError(event) { 73 function fetchTimelineOnError(event) {
74 var xhr = event.target;
75 console.log(xhr.statusText);
76 gotReponse();
52 } 77 }
53 78
54 function fetchTimeline(vmAddress) { 79 function fetchTimeline(vmAddress, isolateIds) {
80 // Reset combined timeline.
81 traceObject = {
82 'stackFrames': {},
83 'traceEvents': []
84 };
85 pendingRequests = 1 + isolateIds.length;
86
55 var parser = document.createElement('a'); 87 var parser = document.createElement('a');
56 parser.href = vmAddress; 88 parser.href = vmAddress;
57 var requestUri = 'http://' + 89 var requestUri = 'http://' +
58 parser.hostname + 90 parser.hostname +
59 ':' + 91 ':' +
60 parser.port + 92 parser.port +
61 '/_getVMTimeline'; 93 '/_getVMTimeline';
62 fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError); 94 fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError);
95
96 for (var i = 0; i < isolateIds.length; i++) {
97 var isolateId = isolateIds[i];
98 var requestUri = 'http://' +
99 parser.hostname +
100 ':' +
101 parser.port +
102 '/_getCpuProfileTimeline?tags=VMUser&isolateId=' +
103 isolateId;
104 fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError);
105 }
63 } 106 }
64 107
65 function onMessage(event) { 108 function onMessage(event) {
66 var request = JSON.parse(event.data); 109 var request = JSON.parse(event.data);
67 var method = request['method']; 110 var method = request['method'];
68 var params = request['params']; 111 var params = request['params'];
69 switch (method) { 112 switch (method) {
70 case 'refresh': 113 case 'refresh':
71 fetchTimeline(params['vmAddress']); 114 fetchTimeline(params['vmAddress'], params['isolateIds']);
72 break; 115 break;
73 case 'clear': 116 case 'clear':
74 clearTimeline(); 117 clearTimeline();
75 break; 118 break;
76 default: 119 default:
77 console.log('Unknown method:' + method + '.'); 120 console.log('Unknown method:' + method + '.');
78 } 121 }
79 } 122 }
80 123
81 document.addEventListener('DOMContentLoaded', function() { 124 document.addEventListener('DOMContentLoaded', function() {
82 var container = document.createElement('track-view-container'); 125 var container = document.createElement('track-view-container');
83 container.id = 'track_view_container'; 126 container.id = 'track_view_container';
84 viewer = document.createElement('tr-ui-timeline-view'); 127 viewer = document.createElement('tr-ui-timeline-view');
85 viewer.track_view_container = container; 128 viewer.track_view_container = container;
86 viewer.appendChild(container); 129 viewer.appendChild(container);
87 viewer.id = 'trace-viewer'; 130 viewer.id = 'trace-viewer';
88 viewer.globalMode = true; 131 viewer.globalMode = true;
89 document.body.appendChild(viewer); 132 document.body.appendChild(viewer);
90 registerForMessages(); 133 registerForMessages();
91 }); 134 });
92 135
93 console.log('loaded'); 136 console.log('loaded');
OLDNEW
« no previous file with comments | « runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart ('k') | runtime/vm/profiler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698