Chromium Code Reviews| Index: runtime/observatory/web/timeline.js |
| diff --git a/runtime/observatory/web/timeline.js b/runtime/observatory/web/timeline.js |
| index 155d010b2a42f27b216485882e80c69220215c5e..311823ddf92845eb28acc68371e22748e13c8ea8 100644 |
| --- a/runtime/observatory/web/timeline.js |
| +++ b/runtime/observatory/web/timeline.js |
| @@ -40,18 +40,45 @@ function fetchUri(uri, onLoad, onError) { |
| console.log('GET ' + uri); |
| } |
| + |
| +var traceObject; |
| +var pendingRequests; |
| + |
| function fetchTimelineOnLoad(event) { |
| var xhr = event.target; |
| var response = JSON.parse(xhr.responseText); |
| var result = response['result']; |
| - var traceEvents = result['traceEvents']; |
| - updateTimeline(traceEvents); |
| + var newStackFrames = result['stackFrames']; // Map. |
| + var newTraceEvents = result['traceEvents']; // List. |
| + |
| + // Merge in timeline events. |
| + traceObject.traceEvents = traceObject.traceEvents.concat(newTraceEvents); |
| + for (var key in newStackFrames) { |
| + if (newStackFrames.hasOwnProperty(key)) { |
| + traceObject.stackFrames[key] = newStackFrames[key]; |
| + } |
| + } |
| + |
| + pendingRequests--; |
| + if (pendingRequests == 0) { |
| + console.log("Got all timeline parts"); |
| + updateTimeline(traceObject); |
| + } |
| } |
| function fetchTimelineOnError(event) { |
| + var xhr = event.target; |
| + 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.
|
| } |
| -function fetchTimeline(vmAddress) { |
| +function fetchTimeline(vmAddress, isolateIds) { |
| + // Reset combined timeline. |
| + traceObject = { |
| + 'stackFrames': {}, |
| + 'traceEvents': [] |
| + }; |
| + pendingRequests = 1 + isolateIds.length; |
| + |
| var parser = document.createElement('a'); |
| parser.href = vmAddress; |
| var requestUri = 'http://' + |
| @@ -60,6 +87,17 @@ function fetchTimeline(vmAddress) { |
| parser.port + |
| '/_getVMTimeline'; |
| fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError); |
| + |
| + for (var i = 0; i < isolateIds.length; i++) { |
| + var isolateId = isolateIds[i]; |
| + var requestUri = 'http://' + |
| + parser.hostname + |
| + ':' + |
| + parser.port + |
| + '/_getCpuProfileTimeline?tags=VMUser&isolateId=' + |
| + isolateId; |
| + fetchUri(requestUri, fetchTimelineOnLoad, fetchTimelineOnError); |
| + } |
| } |
| function onMessage(event) { |
| @@ -68,7 +106,7 @@ function onMessage(event) { |
| var params = request['params']; |
| switch (method) { |
| case 'refresh': |
| - fetchTimeline(params['vmAddress']); |
| + fetchTimeline(params['vmAddress'], params['isolateIds']); |
| break; |
| case 'clear': |
| clearTimeline(); |
| @@ -90,4 +128,4 @@ document.addEventListener('DOMContentLoaded', function() { |
| registerForMessages(); |
| }); |
| -console.log('loaded'); |
| +console.log('loaded'); |