Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / tracing / analysis / analysis_link.js
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 tvcm.requireStylesheet('tracing.analysis.analysis_link');
8
9 tvcm.require('tvcm.events');
10 tvcm.require('tvcm.ui');
11 tvcm.require('tracing.selection');
12 tvcm.require('tracing.analysis.util');
13
14 tvcm.exportTo('tracing.analysis', function() {
15
16   var tsRound = tracing.analysis.tsRound;
17
18   var RequestSelectionChangeEvent = tvcm.Event.bind(
19       undefined, 'requestSelectionChange', true, false);
20
21   /**
22    * A clickable link that requests a change of selection to the return value of
23    * this.selectionGenerator when clicked.
24    *
25    * @constructor
26    */
27   var AnalysisLink = tvcm.ui.define('a');
28
29   AnalysisLink.prototype = {
30     __proto__: HTMLAnchorElement.prototype,
31     decorate: function() {
32       this.classList.add('analysis-link');
33       this.addEventListener('click', this.onClicked_.bind(this));
34     },
35     onClicked_: function() {
36       var event = new RequestSelectionChangeEvent();
37       event.selection = this.selectionGenerator();
38       this.dispatchEvent(event);
39     }
40   };
41
42   /**
43    * Changes the selection to the given ObjectSnapshot when clicked.
44    * @constructor
45    */
46   var ObjectSnapshotLink = tvcm.ui.define(
47       'object-snapshot-link', AnalysisLink);
48
49   ObjectSnapshotLink.prototype = {
50     __proto__: AnalysisLink.prototype,
51
52     decorate: function() {
53       AnalysisLink.prototype.decorate.apply(this);
54     },
55
56     set objectSnapshot(snapshot) {
57       this.textContent =
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);
64         return selection;
65       }.bind(this);
66     }
67   };
68
69   /**
70    * Changes the selection to the given ObjectInstance when clicked.
71    * @constructor
72    */
73   var ObjectInstanceLink = tvcm.ui.define(
74       'object-instance-link', AnalysisLink);
75
76   ObjectInstanceLink.prototype = {
77     __proto__: AnalysisLink.prototype,
78
79     decorate: function() {
80       AnalysisLink.prototype.decorate.apply(this);
81     },
82
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);
88         return selection;
89       }.bind(this);
90     }
91   };
92
93   return {
94     RequestSelectionChangeEvent: RequestSelectionChangeEvent,
95     AnalysisLink: AnalysisLink,
96     ObjectSnapshotLink: ObjectSnapshotLink,
97     ObjectInstanceLink: ObjectInstanceLink
98   };
99 });