166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils'); 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.analysis.analysis_view'); 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.analysis.stub_analysis_results'); 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.analysis.analyze_counters'); 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.selection'); 126833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennisbase.require('tracing.trace_model.counter'); 136833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennisbase.require('tracing.trace_model.counter_series'); 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.analysis.analyze_counters', function() { 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var Counter = tracing.trace_model.Counter; 176833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var CounterSeries = tracing.trace_model.CounterSeries; 186833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var Selection = tracing.Selection; 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var AnalysisView = tracing.analysis.AnalysisView; 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var StubAnalysisResults = tracing.analysis.StubAnalysisResults; 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var createSelectionWithCounters = function(numSamples) { 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (numSamples > 2 || numSamples < 1) 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis throw new Error('This function only supports 1 or 2 samples'); 266833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr = new Counter(null, 0, '', 'ctr'); 286833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var series = new CounterSeries('value', 0); 296833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(series); 306833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 316833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(0, 0); 326833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(10, 10); 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = new Selection(); 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1track = {}; 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr, 1); 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 386833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis if (numSamples === 1) 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return selection; 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr, 0); 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return selection; 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 456833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis function createSeries(ctr) { 466833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var allocatedSeries = new CounterSeries('bytesallocated', 0); 476833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var freeSeries = new CounterSeries('bytesfree', 1); 486833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 496833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(allocatedSeries); 506833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(freeSeries); 516833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 526833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(0, 0); 536833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(10, 25); 546833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(20, 10); 556833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 566833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(0, 15); 576833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(10, 20); 586833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(20, 5); 596833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis } 606833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var createSelectionWithTwoSeriesSingleCounter = function() { 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr = new Counter(null, 0, 'foo', 'ctr[0]'); 636833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis createSeries(ctr); 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = new Selection(); 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1track = {}; 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr, 1); 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return selection; 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var createSelectionWithTwoSeriesTwoCounters = function() { 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr1 = new Counter(null, 0, '', 'ctr1'); 746833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis createSeries(ctr1); 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr2 = new Counter(null, 0, '', 'ctr2'); 776833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis createSeries(ctr2); 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = new Selection(); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1track = {}; 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr1, 1); 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr2, 2); 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return selection; 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var createSelectionWithTwoCountersDiffSeriesDiffHits = function() { 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr1 = new Counter(null, 0, '', 'a'); 886833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var allocatedSeries = new CounterSeries('bytesallocated', 0); 896833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr1.addSeries(allocatedSeries); 906833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 916833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(0, 0); 926833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(10, 25); 936833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(20, 15); 946833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('a', ctr1.name); 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(3, ctr1.numSamples); 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(1, ctr1.numSeries); 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr2 = new Counter(null, 0, '', 'b'); 1006833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var allocatedSeries = new CounterSeries('bytesallocated', 0); 1016833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis var freeSeries = new CounterSeries('bytesfree', 1); 1026833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 1036833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr2.addSeries(allocatedSeries); 1046833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr2.addSeries(freeSeries); 1056833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 1066833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(0, 0); 1076833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(10, 25); 1086833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(20, 10); 1096833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis allocatedSeries.addSample(30, 15); 1106833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 1116833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(0, 20); 1126833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(10, 5); 1136833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(20, 25); 1146833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis freeSeries.addSample(30, 0); 1156833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('b', ctr2.name); 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(4, ctr2.numSamples); 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(2, ctr2.numSeries); 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = new Selection(); 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1track = {}; 12266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr1, 1); 12366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.addCounterSample(t1track, ctr2, 2); 12466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return selection; 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('instantiate_singleCounterWithTwoSeries', function() { 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = createSelectionWithTwoSeriesSingleCounter(); 13066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var analysisEl = new AnalysisView(); 13266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis analysisEl.selection = selection; 13366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addHTMLOutput(analysisEl); 13466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('instantiate_twoCountersWithTwoSeries', function() { 13766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = createSelectionWithTwoSeriesTwoCounters(); 13866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var analysisEl = new AnalysisView(); 14066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis analysisEl.selection = selection; 14166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addHTMLOutput(analysisEl); 14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 14366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('analyzeSelectionWithSingleCounter', function() { 14566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = createSelectionWithCounters(1); 14666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var results = new StubAnalysisResults(); 14866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracing.analysis.analyzeSelection(results, selection); 1496833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 15066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(1, results.tables.length); 15166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var table = results.tables[0]; 15266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('Selected counter:', table.tableHeader); 15366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(3, table.rows.length); 15466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('Title', table.rows[0].label); 15666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('Timestamp', table.rows[1].label); 15766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('value', table.rows[2].label); 15866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(10, table.rows[2].text); 15966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 16066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('analyzeSelectionWithBasicTwoSeriesTwoCounters', function() { 16266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = createSelectionWithTwoSeriesTwoCounters(); 16366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var results = new StubAnalysisResults(); 16566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracing.analysis.analyzeSelection(results, selection); 16666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(1, results.tables.length); 16766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var table = results.tables[0]; 16866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('Counters:', table.tableHeader); 16966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(4, table.rows.length); 17066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1716833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('ctr1: series(bytesallocated)', table.rows[0].label); 1726833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('ctr1: series(bytesfree)', table.rows[1].label); 1736833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('ctr2: series(bytesallocated)', table.rows[2].label); 1746833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('ctr2: series(bytesfree)', table.rows[3].label); 17566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('analyzeSelectionWithComplexSeriesTwoCounters', function() { 17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var selection = createSelectionWithTwoCountersDiffSeriesDiffHits(); 17966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var results = new StubAnalysisResults(); 18166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracing.analysis.analyzeSelection(results, selection); 18266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(1, results.tables.length); 18366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var table = results.tables[0]; 18466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('Counters:', table.tableHeader); 18566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(3, table.rows.length); 18666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1876833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('a: series(bytesallocated)', table.rows[0].label); 1886833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('b: series(bytesallocated)', table.rows[1].label); 1896833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis assertEquals('b: series(bytesfree)', table.rows[2].label); 19066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 19166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 192