Home | History | Annotate | Download | only in tracing_examples
      1 <!DOCTYPE html>
      2 <html>
      3 <!--
      4 Copyright (c) 2015 The Chromium Authors. All rights reserved.
      5 Use of this source code is governed by a BSD-style license that can be
      6 found in the LICENSE file.
      7 -->
      8 <head>
      9 <title>Deep insights via Bulk Trace Analysis</title>
     10 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     11 
     12 <link rel="import" href="/tracing/ui/base/base.html" data-suppress-import-order>
     13 
     14 <link rel="import" href="/tracing/ui/extras/deep_reports/html_results.html">
     15 <link rel="import" href="/tracing/ui/extras/deep_reports/main.html">
     16 <link rel="import" href="/tracing/ui/extras/full_config.html">
     17 <link rel="import" href="/tracing/ui/timeline_view.html">
     18 
     19 <style>
     20   body {
     21     font-family: sans-serif;
     22   }
     23 </style>
     24 </head>
     25 <body>
     26   <select id="trace-dir"></select>
     27   <tr-ui-e-deep-reports-html-results id="results">
     28   </tr-ui-e-deep-reports-html-results>
     29 
     30   <script>
     31   'use strict';
     32 
     33   function onLoad() {
     34     tr.b.getAsync('/test_data/__file_list__').then(function(data) {
     35       var select = document.querySelector('#trace-file');
     36       var all_files = JSON.parse(data);
     37       var filenames = all_files.filter(function(file) {
     38         if (!file.startsWith('measurmt-traces/'))
     39           return false;
     40         if (file === 'measurmt-traces/README.md')
     41           return false;
     42         return true;
     43       });
     44 
     45       initUI(filenames);
     46     });
     47   }
     48   window.addEventListener('load', onLoad);
     49 
     50   function initUI(files) {
     51     // Groups.
     52     var filesByDirName = {};
     53     files.forEach(function(file) {
     54       var rest = /measurmt-traces\/(.+)/.exec(file)[1];
     55 
     56       // Find subdirectories.
     57       var m = /(.+?)\/(.*)/.exec(rest);
     58       var dirName = m[1];
     59       var baseName = m[2];
     60       if (baseName == 'rail_expectations.json') {
     61         // TODO(nduca): Stash this somewhere else.
     62         return;
     63       }
     64       if (baseName.endsWith('.mp4')) {
     65         // TODO(nduca): Stash this somewhere else.
     66         return;
     67       }
     68       if (filesByDirName[dirName] === undefined)
     69         filesByDirName[dirName] = [];
     70       filesByDirName[dirName].push(file);
     71     });
     72 
     73     var selectEl = document.body.querySelector('#trace-dir');
     74     selectEl.filesByDirName = filesByDirName;
     75 
     76     tr.b.iterItems(filesByDirName, function(dirName, filesInDir) {
     77       var runEl = document.createElement('option');
     78       runEl.textContent = dirName + ': ' + filesInDir.length + ' traces';
     79       runEl.value = dirName;
     80       selectEl.appendChild(runEl);
     81     });
     82 
     83     selectEl.selectedIndex = 0;
     84     selectEl.addEventListener('change', onSelectionChange);
     85     if (!window.location.hash) {
     86       // This will trigger an onHashChange so no need to reload directly.
     87       window.location.hash = '#' + selectEl[selectEl.selectedIndex].value;
     88     } else {
     89       onHashChange();
     90     }
     91   }
     92 
     93   function onSelectionChange() {
     94     var selectEl = document.body.querySelector('#trace-dir');
     95     window.location.hash = '#' + selectEl[selectEl.selectedIndex].value;
     96   }
     97 
     98   function onHashChange() {
     99     var file = window.location.hash.substr(1);
    100     var selectEl = document.querySelector('#trace-dir');
    101     if (selectEl[selectEl.selectedIndex].value != file) {
    102       for (var i = 0; i < selectEl.children.length; i++) {
    103         if (selectEl.children[i].value == file) {
    104           selectEl.selectedIndex = i;
    105           break;
    106         }
    107       }
    108     }
    109     reload();
    110   }
    111   window.addEventListener('hashchange', onHashChange);
    112 
    113   function reload() {
    114     var dirName = window.location.hash.substr(1);
    115     var selectEl = document.body.querySelector('#trace-dir');
    116     var filesInDir = selectEl.filesByDirName[dirName];
    117     var results = document.querySelector('#results');
    118     results.clear();
    119     tr.ui.e.deep_reports.main(results, filesInDir).then(
    120       function success() {
    121       },
    122       function error(err) {
    123         tr.showPanic('Error', err);
    124       });
    125   }
    126   </script>
    127 </body>
    128 </html>
    129