- add third_party src.
[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 base.requireStylesheet('tracing.analysis.analysis_link');
8
9 base.require('base.events');
10 base.require('tracing.selection');
11 base.require('tracing.analysis.util');
12 base.require('ui');
13
14 base.exportTo('tracing.analysis', function() {
15
16   var tsRound = tracing.analysis.tsRound;
17
18   var RequestSelectionChangeEvent = base.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 = ui.define('a');
28
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));
35     },
36     onClicked_: function() {
37       var event = new RequestSelectionChangeEvent();
38       event.selection = this.selectionGenerator();
39       this.dispatchEvent(event);
40     }
41   };
42
43   /**
44    * Changes the selection to the given ObjectSnapshot when clicked.
45    * @constructor
46    */
47   var ObjectSnapshotLink = ui.define(
48       'object-snapshot-link', AnalysisLink);
49
50   ObjectSnapshotLink.prototype = {
51     __proto__: AnalysisLink.prototype,
52
53     decorate: function() {
54       AnalysisLink.prototype.decorate.apply(this);
55     },
56
57     set objectSnapshot(snapshot) {
58       this.textContent =
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);
65         return selection;
66       }.bind(this);
67     }
68   };
69
70   /**
71    * Changes the selection to the given ObjectInstance when clicked.
72    * @constructor
73    */
74   var ObjectInstanceLink = ui.define(
75       'object-instance-link', AnalysisLink);
76
77   ObjectInstanceLink.prototype = {
78     __proto__: AnalysisLink.prototype,
79
80     decorate: function() {
81       AnalysisLink.prototype.decorate.apply(this);
82     },
83
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);
89         return selection;
90       }.bind(this);
91     }
92   };
93
94   return {
95     RequestSelectionChangeEvent: RequestSelectionChangeEvent,
96     AnalysisLink: AnalysisLink,
97     ObjectSnapshotLink: ObjectSnapshotLink,
98     ObjectInstanceLink: ObjectInstanceLink
99   };
100 });