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 base.requireStylesheet('tracing.analysis.analysis_link');
9 base.require('base.events');
10 base.require('tracing.selection');
11 base.require('tracing.analysis.util');
14 base.exportTo('tracing.analysis', function() {
16 var tsRound = tracing.analysis.tsRound;
18 var RequestSelectionChangeEvent = base.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 = ui.define('a');
29 AnalysisLink.prototype = {
30 __proto__: HTMLAnchorElement.prototype,
31 decorate: function() {
32 this.classList.add('analysis-link');
33 this.selectionGenerator;
34 this.addEventListener('click', this.onClicked_.bind(this));
36 onClicked_: function() {
37 var event = new RequestSelectionChangeEvent();
38 event.selection = this.selectionGenerator();
39 this.dispatchEvent(event);
44 * Changes the selection to the given ObjectSnapshot when clicked.
47 var ObjectSnapshotLink = ui.define(
48 'object-snapshot-link', AnalysisLink);
50 ObjectSnapshotLink.prototype = {
51 __proto__: AnalysisLink.prototype,
53 decorate: function() {
54 AnalysisLink.prototype.decorate.apply(this);
57 set objectSnapshot(snapshot) {
59 snapshot.objectInstance.typeName + ' ' +
60 snapshot.objectInstance.id + ' @ ' +
61 tsRound(snapshot.ts) + ' ms';
62 this.selectionGenerator = function() {
63 var selection = new tracing.Selection();
64 selection.push(snapshot);
71 * Changes the selection to the given ObjectInstance when clicked.
74 var ObjectInstanceLink = ui.define(
75 'object-instance-link', AnalysisLink);
77 ObjectInstanceLink.prototype = {
78 __proto__: AnalysisLink.prototype,
80 decorate: function() {
81 AnalysisLink.prototype.decorate.apply(this);
84 set objectInstance(instance) {
85 this.textContent = instance.typeName + ' ' + instance.id;
86 this.selectionGenerator = function() {
87 var selection = new tracing.Selection();
88 selection.push(instance);
95 RequestSelectionChangeEvent: RequestSelectionChangeEvent,
96 AnalysisLink: AnalysisLink,
97 ObjectSnapshotLink: ObjectSnapshotLink,
98 ObjectInstanceLink: ObjectInstanceLink