Home | History | Annotate | Download | only in analysis
      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.
      4 
      5 'use strict';
      6 
      7 base.require('tracing.test_utils');
      8 base.require('tracing.analysis.analysis_view');
      9 base.require('tracing.analysis.stub_analysis_results');
     10 base.require('tracing.analysis.analyze_counters');
     11 base.require('tracing.selection');
     12 base.require('tracing.trace_model.counter');
     13 base.require('tracing.trace_model.counter_series');
     14 
     15 base.unittest.testSuite('tracing.analysis.analyze_counters', function() {
     16   var Counter = tracing.trace_model.Counter;
     17   var CounterSeries = tracing.trace_model.CounterSeries;
     18 
     19   var Selection = tracing.Selection;
     20   var AnalysisView = tracing.analysis.AnalysisView;
     21   var StubAnalysisResults = tracing.analysis.StubAnalysisResults;
     22 
     23   var createSelectionWithCounters = function(numSamples) {
     24     if (numSamples > 2 || numSamples < 1)
     25       throw new Error('This function only supports 1 or 2 samples');
     26 
     27     var ctr = new Counter(null, 0, '', 'ctr');
     28     var series = new CounterSeries('value', 0);
     29     ctr.addSeries(series);
     30 
     31     series.addSample(0, 0);
     32     series.addSample(10, 10);
     33 
     34     var selection = new Selection();
     35     var t1track = {};
     36     selection.addCounterSample(t1track, ctr, 1);
     37 
     38     if (numSamples === 1)
     39       return selection;
     40 
     41     selection.addCounterSample(t1track, ctr, 0);
     42     return selection;
     43   };
     44 
     45   function createSeries(ctr) {
     46     var allocatedSeries = new CounterSeries('bytesallocated', 0);
     47     var freeSeries = new CounterSeries('bytesfree', 1);
     48 
     49     ctr.addSeries(allocatedSeries);
     50     ctr.addSeries(freeSeries);
     51 
     52     allocatedSeries.addSample(0, 0);
     53     allocatedSeries.addSample(10, 25);
     54     allocatedSeries.addSample(20, 10);
     55 
     56     freeSeries.addSample(0, 15);
     57     freeSeries.addSample(10, 20);
     58     freeSeries.addSample(20, 5);
     59   }
     60 
     61   var createSelectionWithTwoSeriesSingleCounter = function() {
     62     var ctr = new Counter(null, 0, 'foo', 'ctr[0]');
     63     createSeries(ctr);
     64 
     65     var selection = new Selection();
     66     var t1track = {};
     67 
     68     selection.addCounterSample(t1track, ctr, 1);
     69     return selection;
     70   };
     71 
     72   var createSelectionWithTwoSeriesTwoCounters = function() {
     73     var ctr1 = new Counter(null, 0, '', 'ctr1');
     74     createSeries(ctr1);
     75 
     76     var ctr2 = new Counter(null, 0, '', 'ctr2');
     77     createSeries(ctr2);
     78 
     79     var selection = new Selection();
     80     var t1track = {};
     81     selection.addCounterSample(t1track, ctr1, 1);
     82     selection.addCounterSample(t1track, ctr2, 2);
     83     return selection;
     84   };
     85 
     86   var createSelectionWithTwoCountersDiffSeriesDiffHits = function() {
     87     var ctr1 = new Counter(null, 0, '', 'a');
     88     var allocatedSeries = new CounterSeries('bytesallocated', 0);
     89     ctr1.addSeries(allocatedSeries);
     90 
     91     allocatedSeries.addSample(0, 0);
     92     allocatedSeries.addSample(10, 25);
     93     allocatedSeries.addSample(20, 15);
     94 
     95     assertEquals('a', ctr1.name);
     96     assertEquals(3, ctr1.numSamples);
     97     assertEquals(1, ctr1.numSeries);
     98 
     99     var ctr2 = new Counter(null, 0, '', 'b');
    100     var allocatedSeries = new CounterSeries('bytesallocated', 0);
    101     var freeSeries = new CounterSeries('bytesfree', 1);
    102 
    103     ctr2.addSeries(allocatedSeries);
    104     ctr2.addSeries(freeSeries);
    105 
    106     allocatedSeries.addSample(0, 0);
    107     allocatedSeries.addSample(10, 25);
    108     allocatedSeries.addSample(20, 10);
    109     allocatedSeries.addSample(30, 15);
    110 
    111     freeSeries.addSample(0, 20);
    112     freeSeries.addSample(10, 5);
    113     freeSeries.addSample(20, 25);
    114     freeSeries.addSample(30, 0);
    115 
    116     assertEquals('b', ctr2.name);
    117     assertEquals(4, ctr2.numSamples);
    118     assertEquals(2, ctr2.numSeries);
    119 
    120     var selection = new Selection();
    121     var t1track = {};
    122     selection.addCounterSample(t1track, ctr1, 1);
    123     selection.addCounterSample(t1track, ctr2, 2);
    124 
    125     return selection;
    126   };
    127 
    128   test('instantiate_singleCounterWithTwoSeries', function() {
    129     var selection = createSelectionWithTwoSeriesSingleCounter();
    130 
    131     var analysisEl = new AnalysisView();
    132     analysisEl.selection = selection;
    133     this.addHTMLOutput(analysisEl);
    134   });
    135 
    136   test('instantiate_twoCountersWithTwoSeries', function() {
    137     var selection = createSelectionWithTwoSeriesTwoCounters();
    138 
    139     var analysisEl = new AnalysisView();
    140     analysisEl.selection = selection;
    141     this.addHTMLOutput(analysisEl);
    142   });
    143 
    144   test('analyzeSelectionWithSingleCounter', function() {
    145     var selection = createSelectionWithCounters(1);
    146 
    147     var results = new StubAnalysisResults();
    148     tracing.analysis.analyzeSelection(results, selection);
    149 
    150     assertEquals(1, results.tables.length);
    151     var table = results.tables[0];
    152     assertEquals('Selected counter:', table.tableHeader);
    153     assertEquals(3, table.rows.length);
    154 
    155     assertEquals('Title', table.rows[0].label);
    156     assertEquals('Timestamp', table.rows[1].label);
    157     assertEquals('value', table.rows[2].label);
    158     assertEquals(10, table.rows[2].text);
    159   });
    160 
    161   test('analyzeSelectionWithBasicTwoSeriesTwoCounters', function() {
    162     var selection = createSelectionWithTwoSeriesTwoCounters();
    163 
    164     var results = new StubAnalysisResults();
    165     tracing.analysis.analyzeSelection(results, selection);
    166     assertEquals(1, results.tables.length);
    167     var table = results.tables[0];
    168     assertEquals('Counters:', table.tableHeader);
    169     assertEquals(4, table.rows.length);
    170 
    171     assertEquals('ctr1: series(bytesallocated)', table.rows[0].label);
    172     assertEquals('ctr1: series(bytesfree)', table.rows[1].label);
    173     assertEquals('ctr2: series(bytesallocated)', table.rows[2].label);
    174     assertEquals('ctr2: series(bytesfree)', table.rows[3].label);
    175   });
    176 
    177   test('analyzeSelectionWithComplexSeriesTwoCounters', function() {
    178     var selection = createSelectionWithTwoCountersDiffSeriesDiffHits();
    179 
    180     var results = new StubAnalysisResults();
    181     tracing.analysis.analyzeSelection(results, selection);
    182     assertEquals(1, results.tables.length);
    183     var table = results.tables[0];
    184     assertEquals('Counters:', table.tableHeader);
    185     assertEquals(3, table.rows.length);
    186 
    187     assertEquals('a: series(bytesallocated)', table.rows[0].label);
    188     assertEquals('b: series(bytesallocated)', table.rows[1].label);
    189     assertEquals('b: series(bytesfree)', table.rows[2].label);
    190   });
    191 });
    192