Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / analysis / analyze_selection.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2013 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/analyze_counters.html">
9 <link rel="import" href="/tracing/analysis/analyze_samples.html">
10 <link rel="import" href="/tracing/analysis/analyze_slices.html">
11 <link rel="import" href="/tracing/analysis/util.html">
12 <link rel="import" href="/tvcm/ui.html">
13
14 <script>
15 'use strict';
16
17 tvcm.exportTo('tracing.analysis', function() {
18   /**
19    * Analyzes the selection, outputting the analysis results into the provided
20    * results object.
21    *
22    * @param {AnalysisResults} results Where the analysis is placed.
23    * @param {Selection} selection What to analyze.
24    */
25   function analyzeSelection(results, selection) {
26     analyzeEventsByType(results, selection.getEventsOrganizedByType());
27   }
28
29   function analyzeEventsByType(results, eventsByType) {
30     var sliceEvents = eventsByType.slices;
31     var counterSampleEvents = eventsByType.counterSamples;
32     var instantEvents = eventsByType.instantEvents;
33     var sampleEvents = eventsByType.samples;
34     var flowEvents = eventsByType.flowEvents;
35
36     var objectEvents = new tracing.Selection();
37     objectEvents.addSelection(eventsByType.objectSnapshots);
38     objectEvents.addSelection(eventsByType.objectInstances);
39
40     if (sliceEvents.length == 1) {
41       tracing.analysis.analyzeSingleSlice(results, sliceEvents[0], 'Slice');
42     } else if (sliceEvents.length > 1) {
43       tracing.analysis.analyzeMultipleSlices(results, sliceEvents, 'Slices');
44     }
45
46     if (flowEvents.length == 1) {
47       tracing.analysis.analyzeSingleSlice(results, flowEvents[0], 'Flow Event');
48     } else if (flowEvents.length > 1) {
49       tracing.analysis.analyzeMultipleSlices(results, flowEvents,
50                                              'Flow Events');
51     }
52
53     if (instantEvents.length == 1) {
54       tracing.analysis.analyzeSingleSlice(results, instantEvents[0],
55                                           'Instant Event');
56     } else if (instantEvents.length > 1) {
57       tracing.analysis.analyzeMultipleSlices(results, instantEvents,
58                                              'Instant Events');
59     }
60
61     if (sampleEvents.length == 1) {
62       tracing.analysis.analyzeSingleSampleEvent(results, sampleEvents[0],
63                                                 'Sample Event');
64     } else if (sampleEvents.length > 1) {
65       tracing.analysis.analyzeMultipleSampleEvents(results, sampleEvents,
66                                                    'Sample Events');
67     }
68
69     if (counterSampleEvents.length != 0)
70       tracing.analysis.analyzeCounterSamples(results, counterSampleEvents);
71
72     if (objectEvents.length)
73       analyzeObjectEvents(results, objectEvents);
74   }
75
76   /**
77    * Extremely simplistic analysis of objects. Mainly exists to provide
78    * click-through to the main object's analysis view.
79    */
80   function analyzeObjectEvents(results, objectEvents) {
81     objectEvents = tvcm.asArray(objectEvents).sort(
82         tvcm.Range.compareByMinTimes);
83
84     results.appendHeader('Selected Objects:');
85     var table = results.appendTable('analysis-object-sample-table', 2);
86
87     objectEvents.forEach(function(event) {
88       var row = results.appendBodyRow(table);
89       var ts;
90       var objectText;
91       var selectionGenerator;
92       if (event instanceof tracing.trace_model.ObjectSnapshot) {
93         var objectSnapshot = event;
94         ts = tracing.analysis.tsRound(objectSnapshot.ts);
95         objectText = objectSnapshot.objectInstance.typeName + ' ' +
96             objectSnapshot.objectInstance.id;
97         selectionGenerator = function() {
98           var selection = new tracing.Selection();
99           selection.push(objectSnapshot);
100           return selection;
101         };
102       } else {
103         var objectInstance = event;
104
105         var deletionTs = objectInstance.deletionTs == Number.MAX_VALUE ?
106             '' : tracing.analysis.tsRound(objectInstance.deletionTs);
107         ts = tracing.analysis.tsRound(objectInstance.creationTs) +
108             '-' + deletionTs;
109
110         objectText = objectInstance.typeName + ' ' +
111             objectInstance.id;
112
113         selectionGenerator = function() {
114           var selection = new tracing.Selection();
115           selection.push(objectInstance);
116           return selection;
117         };
118       }
119
120       results.appendTableCell(table, row, ts);
121       var linkContainer = results.appendTableCell(table, row, '');
122       linkContainer.appendChild(
123           results.createSelectionChangingLink(objectText, selectionGenerator));
124     });
125   }
126
127   return {
128     analyzeSelection: analyzeSelection,
129     analyzeEventsByType: analyzeEventsByType
130   };
131 });
132 </script>