| <!DOCTYPE HTML> |
| <html> |
| <!-- |
| Copyright (c) 2015 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>Deep insights via Bulk Trace Analysis</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="/trace_viewer.html"> |
| <link rel="import" href="/extras/full_config.html"> |
| |
| <link rel="import" href="/extras/deep_reports/main.html"> |
| <link rel="import" href="/extras/deep_reports/html_results.html"> |
| <style> |
| body { |
| font-family: sans-serif; |
| } |
| </style> |
| </head> |
| <body> |
| <select id="trace-dir"></select> |
| <tv-e-dr-html-results id="results"></tv-e-dr-html-results> |
| <script> |
| 'use strict'; |
| |
| function onLoad() { |
| tv.b.getAsync('/json/examples').then(function(data) { |
| var select = document.querySelector('#trace-file'); |
| var all_files = JSON.parse(data); |
| var files = all_files.filter(function(file) { |
| if (!file.startsWith('measurmt-traces/')) |
| return false; |
| if (file === 'measurmt-traces/README.md') |
| return false; |
| return true; |
| }); |
| |
| var filenames = files.map(function(file) { |
| return '../test_data/' + file; |
| }); |
| initUI(filenames); |
| }); |
| } |
| window.addEventListener('load', onLoad); |
| |
| function initUI(files) { |
| // Groups. |
| var filesByDirName = {}; |
| files.forEach(function(file) { |
| var rest = /measurmt-traces\/(.+)/.exec(file)[1]; |
| |
| // Find subdirectories. |
| var m = /(.+?)\/(.*)/.exec(rest); |
| var dirName = m[1]; |
| var baseName = m[2]; |
| if (baseName == 'rail_expectations.json') { |
| // TODO(nduca): Stash this somewhere else. |
| return; |
| } |
| if (baseName.endsWith('.mp4')) { |
| // TODO(nduca): Stash this somewhere else. |
| return; |
| } |
| if (filesByDirName[dirName] === undefined) |
| filesByDirName[dirName] = []; |
| filesByDirName[dirName].push(file); |
| }); |
| |
| var selectEl = document.body.querySelector('#trace-dir'); |
| selectEl.filesByDirName = filesByDirName; |
| |
| tv.b.iterItems(filesByDirName, function(dirName, filesInDir) { |
| var runEl = document.createElement('option'); |
| runEl.textContent = dirName + ': ' + filesInDir.length + ' traces'; |
| runEl.value = dirName; |
| selectEl.appendChild(runEl); |
| }); |
| |
| selectEl.selectedIndex = 0; |
| selectEl.addEventListener('change', onSelectionChange); |
| if (!window.location.hash) { |
| // This will trigger an onHashChange so no need to reload directly. |
| window.location.hash = '#' + selectEl[selectEl.selectedIndex].value; |
| } else { |
| onHashChange(); |
| } |
| } |
| |
| function onSelectionChange() { |
| var selectEl = document.body.querySelector('#trace-dir'); |
| window.location.hash = '#' + selectEl[selectEl.selectedIndex].value; |
| } |
| |
| function onHashChange() { |
| var file = window.location.hash.substr(1); |
| var selectEl = document.querySelector('#trace-dir'); |
| if (selectEl[selectEl.selectedIndex].value != file) { |
| for (var i = 0; i < selectEl.children.length; i++) { |
| if (selectEl.children[i].value == file) { |
| selectEl.selectedIndex = i; |
| break; |
| } |
| } |
| } |
| reload(); |
| } |
| window.addEventListener('hashchange', onHashChange); |
| |
| function reload() { |
| var dirName = window.location.hash.substr(1); |
| var selectEl = document.body.querySelector('#trace-dir'); |
| var filesInDir = selectEl.filesByDirName[dirName]; |
| var results = document.querySelector('#results'); |
| results.clear(); |
| tv.e.deep_reports.main(results, filesInDir).then( |
| function success() { |
| }, |
| function error(err) { |
| tv.showPanic('Error', err); |
| }); |
| } |
| </script> |
| </body> |
| </html> |