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