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.
7 tvcm.requireStylesheet('tracing.analysis.analysis_link');
9 tvcm.require('tvcm.events');
10 tvcm.require('tvcm.ui');
11 tvcm.require('tracing.selection');
12 tvcm.require('tracing.analysis.util');
14 tvcm.exportTo('tracing.analysis', function() {
16 var tsRound = tracing.analysis.tsRound;
18 var RequestSelectionChangeEvent = tvcm.Event.bind(
19 undefined, 'requestSelectionChange', true, false);
22 * A clickable link that requests a change of selection to the return value of
23 * this.selectionGenerator when clicked.
27 var AnalysisLink = tvcm.ui.define('a');
29 AnalysisLink.prototype = {
30 __proto__: HTMLAnchorElement.prototype,
31 decorate: function() {
32 this.classList.add('analysis-link');
33 this.addEventListener('click', this.onClicked_.bind(this));
35 onClicked_: function() {
36 var event = new RequestSelectionChangeEvent();
37 event.selection = this.selectionGenerator();
38 this.dispatchEvent(event);
43 * Changes the selection to the given ObjectSnapshot when clicked.
46 var ObjectSnapshotLink = tvcm.ui.define(
47 'object-snapshot-link', AnalysisLink);
49 ObjectSnapshotLink.prototype = {
50 __proto__: AnalysisLink.prototype,
52 decorate: function() {
53 AnalysisLink.prototype.decorate.apply(this);
56 set objectSnapshot(snapshot) {
58 snapshot.objectInstance.typeName + ' ' +
59 snapshot.objectInstance.id + ' @ ' +
60 tsRound(snapshot.ts) + ' ms';
61 this.selectionGenerator = function() {
62 var selection = new tracing.Selection();
63 selection.push(snapshot);
70 * Changes the selection to the given ObjectInstance when clicked.
73 var ObjectInstanceLink = tvcm.ui.define(
74 'object-instance-link', AnalysisLink);
76 ObjectInstanceLink.prototype = {
77 __proto__: AnalysisLink.prototype,
79 decorate: function() {
80 AnalysisLink.prototype.decorate.apply(this);
83 set objectInstance(instance) {
84 this.textContent = instance.typeName + ' ' + instance.id;
85 this.selectionGenerator = function() {
86 var selection = new tracing.Selection();
87 selection.push(instance);
94 RequestSelectionChangeEvent: RequestSelectionChangeEvent,
95 AnalysisLink: AnalysisLink,
96 ObjectSnapshotLink: ObjectSnapshotLink,
97 ObjectInstanceLink: ObjectInstanceLink