| Index: appengine/chromium_cq_status/templates/trace_viewer.html
|
| diff --git a/appengine/chromium_cq_status/templates/trace_viewer.html b/appengine/chromium_cq_status/templates/trace_viewer.html
|
| deleted file mode 100644
|
| index 321008177e98c0c26f73eb4feb73d7cd9714a5d4..0000000000000000000000000000000000000000
|
| --- a/appengine/chromium_cq_status/templates/trace_viewer.html
|
| +++ /dev/null
|
| @@ -1,208 +0,0 @@
|
| -<!DOCTYPE HTML>
|
| -<html>
|
| -<!--
|
| -Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -Use of this source code is governed by a BSD-style license that can be
|
| -found in the LICENSE file.
|
| --->
|
| -<head>
|
| -<title>CQ Timeline View for issue %(issue)s patch %(patchset)s</title>
|
| -<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
| -
|
| -<script src="/components/webcomponentsjs/webcomponents.js"></script>
|
| -<link rel="import" href="/components/polymer/polymer.html">
|
| -
|
| -<link rel="import" href="/tracing/base/xhr.html">
|
| -<link rel="import" href="/tracing/extras/full_config.html">
|
| -<link rel="import" href="/tracing/importer/import.html">
|
| -<link rel="import" href="/tracing/ui/timeline_view.html">
|
| -
|
| -<style>
|
| - html,
|
| - body {
|
| - height: 100%%;
|
| - }
|
| -
|
| - body {
|
| - -webkit-flex-direction: column;
|
| - flex-direction: column;
|
| - display: -webkit-flex;
|
| - display: flex;
|
| - margin: 0;
|
| - padding: 0;
|
| - }
|
| -
|
| - body > tr-ui-timeline-view {
|
| - -webkit-flex: 1 1 auto;
|
| - flex: 1 1 auto;
|
| - min-height: 0;
|
| - }
|
| -
|
| - body > tr-ui-timeline-view:focus {
|
| - outline: none;
|
| - }
|
| -
|
| -</style>
|
| -</head>
|
| -<body>
|
| - <tr-ui-timeline-view>
|
| - <track-view-container id='track_view_container'></track-view-container>
|
| - </tr-ui-timeline-view>
|
| -
|
| - <script>
|
| - 'use strict';
|
| -
|
| - var timelineViewEl;
|
| -
|
| - function loadTraces(filenames, onTracesLoaded) {
|
| - var traces = [];
|
| - for (var i = 0; i < filenames.length; i++) {
|
| - traces.push(undefined);
|
| - }
|
| - var numTracesPending = filenames.length;
|
| -
|
| - filenames.forEach(function(filename, i) {
|
| - getAsync(filename, function(trace) {
|
| - traces[i] = trace;
|
| - numTracesPending--;
|
| - if (numTracesPending == 0)
|
| - onTracesLoaded(filenames, traces);
|
| - });
|
| - });
|
| - }
|
| -
|
| - function getAsync(url, cb) {
|
| - tr.b.getAsync(url).then(cb);
|
| - }
|
| -
|
| - function createViewFromTraces(filenames, traces) {
|
| - var m = new tr.Model();
|
| - var shiftWorld = true;
|
| - if (timelineViewEl.model) {
|
| - m = timelineViewEl.model;
|
| - shiftWorld = false;
|
| - for (var traceIndex = 0; traceIndex < traces.length; traceIndex++) {
|
| - var eventList = JSON.parse(traces[traceIndex]);
|
| - for (var eventIndex = 0; eventIndex < eventList.length; eventIndex++) {
|
| - var traceEvent = eventList[eventIndex];
|
| - traceEvent.ts = m.convertTimestampToModelTime('traceEventClock',
|
| - 0) * 1000 + traceEvent.ts;
|
| - }
|
| - traces[traceIndex] = JSON.stringify(eventList);
|
| - };
|
| - }
|
| - var options = new tr.importer.ImportOptions();
|
| - options.shiftWorldToZero = shiftWorld;
|
| - var i = new tr.importer.Import(m, options);
|
| - var p = i.importTracesWithProgressDialog(traces);
|
| - p.then(
|
| - function() {
|
| - timelineViewEl.model = m;
|
| - timelineViewEl.updateDocumentFavicon();
|
| - timelineViewEl.globalMode = true;
|
| - timelineViewEl.viewTitle = '';
|
| -
|
| - if (timelineViewEl.trackView) {
|
| - var trackView = timelineViewEl.trackView;
|
| - // Set the clicker to be in select mode.
|
| - trackView.mouseModeSelector_.mode =
|
| - tr.ui.b.MOUSE_SELECTOR_MODE.SELECTION;
|
| -
|
| - // Remove the default double-click functionality.
|
| - trackView.removeEventListener('dblclick', trackView.onDblClick_);
|
| - // Define replacement double-click method.
|
| - var loadBuildbotData = function(e) {
|
| - if (this.mouseModeSelector_.mode !==
|
| - tr.ui.b.MOUSE_SELECTOR_MODE.SELECTION)
|
| - return;
|
| -
|
| - var controller = this.brushingStateController_;
|
| -
|
| - // Fetch slices currently being selected.
|
| - var curSelection = controller.selection;
|
| - if (!curSelection.length || !curSelection[0].title)
|
| - return;
|
| -
|
| - var build = curSelection[0];
|
| - if (build.args && build.args.build_url) {
|
| - if (build.expanded) {
|
| - // TODO: Currently deleting the expanded slices isn't possible
|
| - } else {
|
| - // TODO: Fix private variable invocation, currently necessary
|
| - // to allow a second import.
|
| - timelineViewEl.model.importOptions_ = undefined;
|
| - var requestUrl = '/builder-timeline-data/' + build.category +
|
| - '/' + build.title + '/';
|
| - var buildUrl = build.args.build_url;
|
| - var buildId = buildUrl.substr(buildUrl.indexOf('/builds/') +
|
| - '/builds/'.length, buildUrl.length);
|
| - var parentProcess = build.parentContainer.parent.pid;
|
| - requestUrl += buildId + '/' + parentProcess;
|
| -
|
| - loadTraces([requestUrl], createViewFromTraces);
|
| - build.expanded = true;
|
| - }
|
| - } else {
|
| - // Perform the previous default action otherwise.
|
| - var selection = new tr.model.EventSet();
|
| - var filter = new tr.c.ExactTitleFilter(curSelection[0].title);
|
| - this.modelTrack_.addAllEventsMatchingFilterToSelection(filter,
|
| - selection);
|
| -
|
| - controller.changeSelectionFromTimeline(selection);
|
| - }
|
| - }
|
| -
|
| - var onDblClick = loadBuildbotData.bind(trackView);
|
| - trackView.addEventListener('dblclick', onDblClick);
|
| - }
|
| - },
|
| - function(err) {
|
| - var overlay = new tr.ui.b.Overlay();
|
| - overlay.textContent = tr.b.normalizeException(err).message;
|
| - overlay.title = 'Import error';
|
| - overlay.visible = true;
|
| - }
|
| - );
|
| - }
|
| -
|
| - function cleanFilename(file) {
|
| - var m = /\/test_data\/(.+)/.exec(file);
|
| - var rest = m[1];
|
| -
|
| - function upcase(letter) {
|
| - return ' ' + letter.toUpperCase();
|
| - }
|
| -
|
| - return rest.replace(/_/g, ' ')
|
| - .replace(/\.[^\.]*$/, '')
|
| - .replace(/ ([a-z])/g, upcase)
|
| - .replace(/^[a-z]/, upcase);
|
| - }
|
| -
|
| - function onLoad() {
|
| - timelineViewEl = document.querySelector('tr-ui-timeline-view');
|
| - timelineViewEl.globalMode = true;
|
| -
|
| - var instrEl = document.createElement('div');
|
| - instrEl.innerHTML = 'Double click on a builder to display build data.' +
|
| - 'Build data may take up to 30 minutes to be available.';
|
| - timelineViewEl.leftControls.appendChild(instrEl);
|
| -
|
| - var file = "/patch-timeline-data/%(issue)s/%(patchset)s";
|
| - var filenames = [file];
|
| - loadTraces(filenames, createViewFromTraces);
|
| - }
|
| - window.addEventListener('load', onLoad);
|
| -
|
| - // Add Google Analytics integration
|
| - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
| - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
| - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
| - })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
| -
|
| - ga('create', 'UA-55762617-13', {'siteSpeedSampleRate': 100});
|
| - ga('send', 'pageview');
|
| - </script>
|
| -</body>
|
| -</html>
|
|
|