Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / analysis / analyze_objects.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7
8 <link rel="import" href="/tracing/analysis/analysis_sub_view.html">
9 <link rel="import" href="/base.html">
10
11 <polymer-element name="multiple-objects-analysis-sub-view"
12     extends="tracing-analysis-sub-view"
13     constructor="MultipleObjectsAnalysisSubView">
14   <script>
15   'use strict';
16   tv.onPolymerReady(function() {
17     tracing.registerAnalysisSubViewType(
18         0,
19         function supported(selection) {
20           return selection[0] instanceof tracing.trace_model.ObjectInstance ||
21               selection[0] instanceof tracing.trace_model.ObjectSnapshot;
22         },
23         function constructView(selection) {
24           if (selection.length != 1)
25             return new MultipleObjectsAnalysisSubView();
26
27           var event = selection[0];
28           var typeName, viewBaseType, defaultViewConstructor;
29           if (event instanceof tracing.trace_model.ObjectSnapshot) {
30             typeName = event.objectInstance.typeName;
31             viewBaseType = tracing.analysis.ObjectSnapshotView;
32             defaultViewConstructor = tracing.analysis.DefaultObjectSnapshotView;
33           } else if (event instanceof tracing.trace_model.ObjectInstance) {
34             typeName = event.typeName;
35             viewBaseType = tracing.analysis.ObjectInstanceView;
36             defaultViewConstructor = tracing.analysis.DefaultObjectInstanceView;
37           } else {
38             throw new Error('Not recognized');
39           }
40
41           var customViewInfo = viewBaseType.getViewInfo(typeName);
42           if (customViewInfo)
43             return new customViewInfo.constructor();
44           return new defaultViewConstructor();
45         },
46         {
47           passSelectionToConstructor: true
48         });
49   });
50
51   Polymer({
52     created: function() {
53       this.currentSelection_ = undefined;
54     },
55
56     set selection(selection) {
57       this.currentSelection_ = selection;
58       this.textContent = '';
59
60       if (selection.length === 0)
61         return;
62
63       var results = new tracing.analysis.AnalysisResults();
64       this.appendChild(results);
65
66       this.analyzeObjectEvents_(results, selection);
67     },
68
69     get selection() {
70       return this.currentSelection_;
71     },
72
73     /**
74      * Extremely simplistic analysis of objects. Mainly exists to provide
75      * click-through to the main object's analysis view.
76      */
77     analyzeObjectEvents_: function(results, objectEvents) {
78       objectEvents = tv.asArray(objectEvents).sort(
79           tv.Range.compareByMinTimes);
80
81       results.appendHeader('Selected Objects:');
82       var table = results.appendTable('analysis-object-sample-table', 2);
83
84       objectEvents.forEach(function(event) {
85         var row = results.appendBodyRow(table);
86         var ts;
87         var objectText;
88         var selectionGenerator;
89         if (event instanceof tracing.trace_model.ObjectSnapshot) {
90           var objectSnapshot = event;
91           ts = tracing.analysis.tsRound(objectSnapshot.ts);
92           objectText = objectSnapshot.objectInstance.typeName + ' ' +
93               objectSnapshot.objectInstance.id;
94           selectionGenerator = function() {
95             var selection = new tracing.Selection();
96             selection.push(objectSnapshot);
97             return selection;
98           };
99         } else {
100           var objectInstance = event;
101
102           var deletionTs = objectInstance.deletionTs == Number.MAX_VALUE ?
103               '' : tracing.analysis.tsRound(objectInstance.deletionTs);
104           ts = tracing.analysis.tsRound(objectInstance.creationTs) +
105               '-' + deletionTs;
106
107           objectText = objectInstance.typeName + ' ' +
108               objectInstance.id;
109
110           selectionGenerator = function() {
111             var selection = new tracing.Selection();
112             selection.push(objectInstance);
113             return selection;
114           };
115         }
116
117         results.appendTableCell(table, row, ts);
118         var linkContainer = results.appendTableCell(table, row, '');
119         linkContainer.appendChild(
120             results.createSelectionChangingLink(
121                 objectText,
122                 selectionGenerator));
123       });
124     }
125   });
126   </script>
127 </polymer-element>