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.
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">
17 tvcm.exportTo('tracing.analysis', function() {
19 * Analyzes the selection, outputting the analysis results into the provided
22 * @param {AnalysisResults} results Where the analysis is placed.
23 * @param {Selection} selection What to analyze.
25 function analyzeSelection(results, selection) {
26 analyzeEventsByType(results, selection.getEventsOrganizedByType());
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;
36 var objectEvents = new tracing.Selection();
37 objectEvents.addSelection(eventsByType.objectSnapshots);
38 objectEvents.addSelection(eventsByType.objectInstances);
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');
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,
53 if (instantEvents.length == 1) {
54 tracing.analysis.analyzeSingleSlice(results, instantEvents[0],
56 } else if (instantEvents.length > 1) {
57 tracing.analysis.analyzeMultipleSlices(results, instantEvents,
61 if (sampleEvents.length == 1) {
62 tracing.analysis.analyzeSingleSampleEvent(results, sampleEvents[0],
64 } else if (sampleEvents.length > 1) {
65 tracing.analysis.analyzeMultipleSampleEvents(results, sampleEvents,
69 if (counterSampleEvents.length != 0)
70 tracing.analysis.analyzeCounterSamples(results, counterSampleEvents);
72 if (objectEvents.length)
73 analyzeObjectEvents(results, objectEvents);
77 * Extremely simplistic analysis of objects. Mainly exists to provide
78 * click-through to the main object's analysis view.
80 function analyzeObjectEvents(results, objectEvents) {
81 objectEvents = tvcm.asArray(objectEvents).sort(
82 tvcm.Range.compareByMinTimes);
84 results.appendHeader('Selected Objects:');
85 var table = results.appendTable('analysis-object-sample-table', 2);
87 objectEvents.forEach(function(event) {
88 var row = results.appendBodyRow(table);
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);
103 var objectInstance = event;
105 var deletionTs = objectInstance.deletionTs == Number.MAX_VALUE ?
106 '' : tracing.analysis.tsRound(objectInstance.deletionTs);
107 ts = tracing.analysis.tsRound(objectInstance.creationTs) +
110 objectText = objectInstance.typeName + ' ' +
113 selectionGenerator = function() {
114 var selection = new tracing.Selection();
115 selection.push(objectInstance);
120 results.appendTableCell(table, row, ts);
121 var linkContainer = results.appendTableCell(table, row, '');
122 linkContainer.appendChild(
123 results.createSelectionChangingLink(objectText, selectionGenerator));
128 analyzeSelection: analyzeSelection,
129 analyzeEventsByType: analyzeEventsByType