// Copyright (c) 2013 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.
'use strict';
base.requireStylesheet('tracing.analysis.default_object_view');
base.require('tracing.analysis.analysis_link');
base.require('tracing.analysis.object_instance_view');
base.require('tracing.analysis.object_snapshot_view');
base.require('tracing.analysis.util');
base.exportTo('tracing.analysis', function() {
var tsRound = tracing.analysis.tsRound;
/*
* Displays an object instance in a human readable form.
* @constructor
*/
var DefaultObjectSnapshotView = ui.define(
'default-object-snapshot-view',
tracing.analysis.ObjectSnapshotView);
DefaultObjectSnapshotView.prototype = {
__proto__: tracing.analysis.ObjectSnapshotView.prototype,
decorate: function() {
tracing.analysis.ObjectSnapshotView.prototype.decorate.apply(this);
this.classList.add('default-object-view');
this.classList.add('default-object-snapshot-view');
},
updateContents: function() {
var snapshot = this.objectSnapshot;
if (!snapshot) {
this.textContent = '';
return;
}
var instance = snapshot.objectInstance;
var html = '';
html += '<div class="title">Snapshot of <a id="instance-link"></a> @ ' +
tsRound(snapshot.ts) + 'ms</div>\n';
html += '<table>';
html += '<tr>';
html += '<tr><td>args:</td><td id="args"></td></tr>\n';
html += '</table>';
this.innerHTML = html;
// TODO(nduca): ui.decoreate doesn't work when subclassed. So,
// replace the template element.
var instanceLinkEl = new tracing.analysis.ObjectInstanceLink();
instanceLinkEl.objectInstance = instance;
var tmp = this.querySelector('#instance-link');
tmp.parentElement.replaceChild(instanceLinkEl, tmp);
var argsEl = this.querySelector('#args');
argsEl.textContent = JSON.stringify(
snapshot.args,
null,
2);
}
};
/**
* Displays an object instance in a human readable form.
* @constructor
*/
var DefaultObjectInstanceView = ui.define(
'default-object-instance-view',
tracing.analysis.ObjectInstanceView);
DefaultObjectInstanceView.prototype = {
__proto__: tracing.analysis.ObjectInstanceView.prototype,
decorate: function() {
tracing.analysis.ObjectInstanceView.prototype.decorate.apply(this);
this.classList.add('default-object-view');
this.classList.add('default-object-instance-view');
},
updateContents: function() {
var instance = this.objectInstance;
if (!instance) {
this.textContent = '';
return;
}
var html = '';
html += '<div class="title">' +
instance.typeName + ' ' +
instance.id + '</div>\n';
html += '<table>';
html += '<tr>';
html += '<tr><td>creationTs:</td><td>' +
instance.creationTs + '</td></tr>\n';
if (instance.deletionTs != Number.MAX_VALUE) {
html += '<tr><td>deletionTs:</td><td>' +
instance.deletionTs + '</td></tr>\n';
} else {
html += '<tr><td>deletionTs:</td><td>not deleted</td></tr>\n';
}
html += '<tr><td>snapshots:</td><td id="snapshots"></td></tr>\n';
html += '</table>';
this.innerHTML = html;
var snapshotsEl = this.querySelector('#snapshots');
instance.snapshots.forEach(function(snapshot) {
var snapshotLink = new tracing.analysis.ObjectSnapshotLink();
snapshotLink.objectSnapshot = snapshot;
snapshotsEl.appendChild(snapshotLink);
});
}
};
return {
DefaultObjectSnapshotView: DefaultObjectSnapshotView,
DefaultObjectInstanceView: DefaultObjectInstanceView
};
});