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.test_utils');
8 tvcm.require('tracing.analysis.analysis_view');
9 tvcm.require('tracing.analysis.stub_analysis_results');
10 tvcm.require('tracing.analysis.analyze_counters');
11 tvcm.require('tracing.selection');
12 tvcm.require('tracing.trace_model.counter');
13 tvcm.require('tracing.trace_model.counter_series');
15 tvcm.unittest.testSuite('tracing.analysis.analyze_counters_test', function() {
16 var Counter = tracing.trace_model.Counter;
17 var CounterSeries = tracing.trace_model.CounterSeries;
19 var Selection = tracing.Selection;
20 var AnalysisView = tracing.analysis.AnalysisView;
21 var StubAnalysisResults = tracing.analysis.StubAnalysisResults;
23 var createSelectionWithCounters = function(numSamples) {
24 if (numSamples > 2 || numSamples < 1)
25 throw new Error('This function only supports 1 or 2 samples');
27 var ctr = new Counter(null, 0, '', 'ctr');
28 var series = new CounterSeries('value', 0);
29 ctr.addSeries(series);
31 series.addCounterSample(0, 0);
32 series.addCounterSample(10, 10);
34 var selection = new Selection();
36 selection.push(ctr.getSeries(0).samples[1]);
41 selection.push(ctr.getSeries(0).samples[0]);
45 function createSeries(ctr) {
46 var allocatedSeries = new CounterSeries('bytesallocated', 0);
47 var freeSeries = new CounterSeries('bytesfree', 1);
49 ctr.addSeries(allocatedSeries);
50 ctr.addSeries(freeSeries);
52 allocatedSeries.addCounterSample(0, 0);
53 allocatedSeries.addCounterSample(10, 25);
54 allocatedSeries.addCounterSample(20, 10);
56 freeSeries.addCounterSample(0, 15);
57 freeSeries.addCounterSample(10, 20);
58 freeSeries.addCounterSample(20, 5);
61 var createSelectionWithTwoSeriesSingleCounter = function() {
62 var ctr = new Counter(null, 0, 'foo', 'ctr[0]');
65 var selection = new Selection();
68 selection.push(ctr.getSeries(0).samples[1]);
69 selection.push(ctr.getSeries(1).samples[1]);
73 var createSelectionWithTwoSeriesTwoCounters = function() {
74 var ctr1 = new Counter(null, 0, '', 'ctr1');
77 var ctr2 = new Counter(null, 0, '', 'ctr2');
80 var selection = new Selection();
83 selection.push(ctr1.getSeries(0).samples[1]);
84 selection.push(ctr1.getSeries(1).samples[1]);
87 selection.push(ctr2.getSeries(0).samples[2]);
88 selection.push(ctr2.getSeries(1).samples[2]);
92 var createSelectionWithTwoCountersDiffSeriesDiffEvents = function() {
93 var ctr1 = new Counter(null, 0, '', 'a');
94 var ctr1AllocatedSeries = new CounterSeries('bytesallocated', 0);
95 ctr1.addSeries(ctr1AllocatedSeries);
97 ctr1AllocatedSeries.addCounterSample(0, 0);
98 ctr1AllocatedSeries.addCounterSample(10, 25);
99 ctr1AllocatedSeries.addCounterSample(20, 15);
101 assertEquals('a', ctr1.name);
102 assertEquals(3, ctr1.numSamples);
103 assertEquals(1, ctr1.numSeries);
105 var ctr2 = new Counter(null, 0, '', 'b');
106 var ctr2AllocatedSeries = new CounterSeries('bytesallocated', 0);
107 var ctr2FreeSeries = new CounterSeries('bytesfree', 1);
109 ctr2.addSeries(ctr2AllocatedSeries);
110 ctr2.addSeries(ctr2FreeSeries);
112 ctr2AllocatedSeries.addCounterSample(0, 0);
113 ctr2AllocatedSeries.addCounterSample(10, 25);
114 ctr2AllocatedSeries.addCounterSample(20, 10);
115 ctr2AllocatedSeries.addCounterSample(30, 15);
117 ctr2FreeSeries.addCounterSample(0, 20);
118 ctr2FreeSeries.addCounterSample(10, 5);
119 ctr2FreeSeries.addCounterSample(20, 25);
120 ctr2FreeSeries.addCounterSample(30, 0);
122 assertEquals('b', ctr2.name);
123 assertEquals(4, ctr2.numSamples);
124 assertEquals(2, ctr2.numSeries);
126 var selection = new Selection();
130 selection.push(ctr1AllocatedSeries.samples[1]);
131 selection.push(ctr2AllocatedSeries.samples[2]);
132 selection.push(ctr2FreeSeries.samples[2]);
137 test('instantiate_singleCounterWithTwoSeries', function() {
138 var selection = createSelectionWithTwoSeriesSingleCounter();
140 var analysisEl = new AnalysisView();
141 analysisEl.selection = selection;
142 this.addHTMLOutput(analysisEl);
145 test('instantiate_twoCountersWithTwoSeries', function() {
146 var selection = createSelectionWithTwoSeriesTwoCounters();
148 var analysisEl = new AnalysisView();
149 analysisEl.selection = selection;
150 this.addHTMLOutput(analysisEl);
153 test('analyzeSelectionWithSingleCounter', function() {
154 var selection = createSelectionWithCounters(1);
156 var results = new StubAnalysisResults();
157 tracing.analysis.analyzeSelection(results, selection);
159 assertEquals(1, results.tables.length);
160 assertEquals('Selected counter:', results.headers[0].label);
161 var table = results.tables[0];
162 assertEquals(3, table.rows.length);
164 assertEquals('Title', table.rows[0].label);
165 assertEquals('Timestamp', table.rows[1].label);
166 assertEquals('value', table.rows[2].label);
167 assertEquals(10, table.rows[2].text);
170 test('analyzeSelectionWithComplexSeriesTwoCounters', function() {
171 var selection = createSelectionWithTwoCountersDiffSeriesDiffEvents();
173 var results = new StubAnalysisResults();
174 tracing.analysis.analyzeSelection(results, selection);
175 assertEquals(2, results.tables.length);