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.
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() {
14 * Analyzes the selection, outputting the analysis results into the provided
17 * @param {AnalysisResults} results Where the analysis is placed.
18 * @param {Selection} selection What to analyze.
20 function analyzeSelection(results, selection) {
21 analyzeEventsByType(results, selection.getEventsOrganizedByType());
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);
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');
39 if (instantEvents.length == 1) {
40 tracing.analysis.analyzeSingleSlice(results, instantEvents[0],
42 } else if (instantEvents.length > 1) {
43 tracing.analysis.analyzeMultipleSlices(results, instantEvents,
47 if (sampleEvents.length == 1) {
48 tracing.analysis.analyzeSingleSlice(results, sampleEvents[0],
50 } else if (sampleEvents.length > 1) {
51 tracing.analysis.analyzeMultipleSampleEvents(results, sampleEvents,
55 if (counterSampleEvents.length != 0)
56 tracing.analysis.analyzeCounterSamples(results, counterSampleEvents);
58 if (objectEvents.length)
59 analyzeObjectEvents(results, objectEvents);
63 * Extremely simplistic analysis of objects. Mainly exists to provide
64 * click-through to the main object's analysis view.
66 function analyzeObjectEvents(results, objectEvents) {
67 objectEvents = tvcm.asArray(objectEvents).sort(
68 tvcm.Range.compareByMinTimes);
70 results.appendHeader('Selected Objects:');
71 var table = results.appendTable('analysis-object-sample-table', 2);
73 objectEvents.forEach(function(event) {
74 var row = results.appendBodyRow(table);
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);
89 var objectInstance = event;
91 var deletionTs = objectInstance.deletionTs == Number.MAX_VALUE ?
92 '' : tracing.analysis.tsRound(objectInstance.deletionTs);
93 ts = tracing.analysis.tsRound(objectInstance.creationTs) +
96 objectText = objectInstance.typeName + ' ' +
99 selectionGenerator = function() {
100 var selection = new tracing.Selection();
101 selection.push(objectInstance);
106 results.appendTableCell(table, row, ts);
107 var linkContainer = results.appendTableCell(table, row, '');
108 linkContainer.appendChild(
109 results.createSelectionChangingLink(objectText, selectionGenerator));
114 analyzeSelection: analyzeSelection,
115 analyzeEventsByType: analyzeEventsByType