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

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