Home | History | Annotate | Download | only in analysis
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 'use strict';
      6 
      7 base.requireStylesheet('tracing.analysis.default_object_view');
      8 
      9 base.require('tracing.analysis.analysis_link');
     10 base.require('tracing.analysis.object_instance_view');
     11 base.require('tracing.analysis.object_snapshot_view');
     12 base.require('tracing.analysis.util');
     13 base.exportTo('tracing.analysis', function() {
     14   var tsRound = tracing.analysis.tsRound;
     15 
     16   /*
     17    * Displays an object instance in a human readable form.
     18    * @constructor
     19    */
     20   var DefaultObjectSnapshotView = ui.define(
     21       'default-object-snapshot-view',
     22       tracing.analysis.ObjectSnapshotView);
     23 
     24   DefaultObjectSnapshotView.prototype = {
     25     __proto__: tracing.analysis.ObjectSnapshotView.prototype,
     26 
     27     decorate: function() {
     28       tracing.analysis.ObjectSnapshotView.prototype.decorate.apply(this);
     29       this.classList.add('default-object-view');
     30       this.classList.add('default-object-snapshot-view');
     31     },
     32 
     33     updateContents: function() {
     34       var snapshot = this.objectSnapshot;
     35       if (!snapshot) {
     36         this.textContent = '';
     37         return;
     38       }
     39       var instance = snapshot.objectInstance;
     40 
     41       var html = '';
     42       html += '<div class="title">Snapshot of <a id="instance-link"></a> @ ' +
     43           tsRound(snapshot.ts) + 'ms</div>\n';
     44       html += '<table>';
     45       html += '<tr>';
     46       html += '<tr><td>args:</td><td id="args"></td></tr>\n';
     47       html += '</table>';
     48       this.innerHTML = html;
     49 
     50       // TODO(nduca): ui.decoreate doesn't work when subclassed. So,
     51       // replace the template element.
     52       var instanceLinkEl = new tracing.analysis.ObjectInstanceLink();
     53       instanceLinkEl.objectInstance = instance;
     54       var tmp = this.querySelector('#instance-link');
     55       tmp.parentElement.replaceChild(instanceLinkEl, tmp);
     56 
     57       var argsEl = this.querySelector('#args');
     58       argsEl.textContent = JSON.stringify(
     59           snapshot.args,
     60           null,
     61           2);
     62     }
     63   };
     64 
     65   /**
     66    * Displays an object instance in a human readable form.
     67    * @constructor
     68    */
     69   var DefaultObjectInstanceView = ui.define(
     70       'default-object-instance-view',
     71       tracing.analysis.ObjectInstanceView);
     72 
     73   DefaultObjectInstanceView.prototype = {
     74     __proto__: tracing.analysis.ObjectInstanceView.prototype,
     75 
     76     decorate: function() {
     77       tracing.analysis.ObjectInstanceView.prototype.decorate.apply(this);
     78       this.classList.add('default-object-view');
     79       this.classList.add('default-object-instance-view');
     80     },
     81 
     82     updateContents: function() {
     83       var instance = this.objectInstance;
     84       if (!instance) {
     85         this.textContent = '';
     86         return;
     87       }
     88 
     89       var html = '';
     90       html += '<div class="title">' +
     91           instance.typeName + ' ' +
     92           instance.id + '</div>\n';
     93       html += '<table>';
     94       html += '<tr>';
     95       html += '<tr><td>creationTs:</td><td>' +
     96           instance.creationTs + '</td></tr>\n';
     97       if (instance.deletionTs != Number.MAX_VALUE) {
     98         html += '<tr><td>deletionTs:</td><td>' +
     99             instance.deletionTs + '</td></tr>\n';
    100       } else {
    101         html += '<tr><td>deletionTs:</td><td>not deleted</td></tr>\n';
    102       }
    103       html += '<tr><td>snapshots:</td><td id="snapshots"></td></tr>\n';
    104       html += '</table>';
    105       this.innerHTML = html;
    106       var snapshotsEl = this.querySelector('#snapshots');
    107       instance.snapshots.forEach(function(snapshot) {
    108         var snapshotLink = new tracing.analysis.ObjectSnapshotLink();
    109         snapshotLink.objectSnapshot = snapshot;
    110         snapshotsEl.appendChild(snapshotLink);
    111       });
    112     }
    113   };
    114 
    115   return {
    116     DefaultObjectSnapshotView: DefaultObjectSnapshotView,
    117     DefaultObjectInstanceView: DefaultObjectInstanceView
    118   };
    119 });
    120