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

Unified Diff: runtime/observatory/web/timeline.js

Issue 1722373002: Add ability to save and load timelines from Observatory (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/observatory/lib/src/elements/timeline_page.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/web/timeline.js
diff --git a/runtime/observatory/web/timeline.js b/runtime/observatory/web/timeline.js
index 27f572c2ad5cf95b9fe788accdad21235919b70c..9bdf46aa8fa1a3dbe3882b98a0ca2df87320e57a 100644
--- a/runtime/observatory/web/timeline.js
+++ b/runtime/observatory/web/timeline.js
@@ -105,6 +105,85 @@ function fetchTimeline(vmAddress, isolateIds) {
}
}
+function saveTimeline() {
+ if (pendingRequests > 0) {
+ var overlay = new tr.ui.b.Overlay();
+ overlay.textContent = 'Cannot save timeline while fetching one.';
+ overlay.title = 'Save error';
+ overlay.visible = true;
+ console.log('cannot save timeline while fetching one.');
+ return;
+ }
+ if (!traceObject ||
+ !traceObject.traceEvents ||
+ (traceObject.traceEvents.length == 0)) {
+ var overlay = new tr.ui.b.Overlay();
+ overlay.textContent = 'Cannot save an empty timeline.';
+ overlay.title = 'Save error';
+ overlay.visible = true;
+ console.log('Cannot save an empty timeline.');
+ return;
+ }
+ var blob = new Blob([JSON.stringify(traceObject)],
+ {type: 'application/json'});
+ var blobUrl = URL.createObjectURL(blob);
+ var link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
+ link.href = blobUrl;
+ var now = new Date();
+ var defaultFilename = "dart-timeline-" +
+ now.getFullYear() +
+ "-" +
+ now.getMonth() +
+ "-" +
+ now.getDate() +
+ ".json";
+ var filename = window.prompt('Save as', defaultFilename);
+ if (filename) {
+ link.download = filename;
+ link.click();
+ }
+}
+
+function loadTimeline() {
+ if (pendingRequests > 0) {
+ var overlay = new tr.ui.b.Overlay();
+ overlay.textContent = 'Cannot load timeline while fetching one.';
+ overlay.title = 'Save error';
+ overlay.visible = true;
+ console.log('Cannot load timeline while fetching one.');
+ return;
+ }
+ var inputElement = document.createElement('input');
+ inputElement.type = 'file';
+ inputElement.multiple = false;
+
+ var changeFired = false;
+ inputElement.addEventListener('change', function(e) {
+ if (changeFired)
+ return;
+ changeFired = true;
+
+ var file = inputElement.files[0];
+ var reader = new FileReader();
+ reader.onload = function(event) {
+ try {
+ traceObject = JSON.parse(event.target.result);
+ updateTimeline(traceObject);
+ } catch (error) {
+ tr.ui.b.Overlay.showError('Error while loading file: ' + error);
+ }
+ };
+ reader.onerror = function(event) {
+ tr.ui.b.Overlay.showError('Error while loading file: ' + event);
+ };
+ reader.onabort = function(event) {
+ tr.ui.b.Overlay.showError('Error while loading file: ' + event);
+ }
+ reader.readAsText(file);
+ });
+ inputElement.click();
+}
+
function onMessage(event) {
var request = JSON.parse(event.data);
var method = request['method'];
@@ -116,6 +195,12 @@ function onMessage(event) {
case 'clear':
clearTimeline();
break;
+ case 'save':
+ saveTimeline();
+ break;
+ case 'load':
+ loadTimeline();
+ break;
default:
console.log('Unknown method:' + method + '.');
}
« no previous file with comments | « runtime/observatory/lib/src/elements/timeline_page.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698