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