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