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.selection');
     11 base.require('tracing.trace_model');
     12 
     13 base.unittest.testSuite('tracing.analysis.analyze_slices', function() {
     14   var Model = tracing.TraceModel;
     15   var Thread = tracing.trace_model.Thread;
     16   var Selection = tracing.Selection;
     17   var AnalysisView = tracing.analysis.AnalysisView;
     18   var StubAnalysisResults = tracing.analysis.StubAnalysisResults;
     19   var newSliceNamed = tracing.test_utils.newSliceNamed;
     20   var newSliceCategory = tracing.test_utils.newSliceCategory;
     21 
     22   var createSelectionWithSingleSlice = function(withCategory) {
     23     var model = new Model();
     24     var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
     25     if (withCategory)
     26       t53.sliceGroup.pushSlice(newSliceCategory('foo', 'b', 0, 0.002));
     27     else
     28       t53.sliceGroup.pushSlice(newSliceNamed('b', 0, 0.002));
     29 
     30     var t53track = {};
     31     t53track.thread = t53;
     32 
     33     var selection = new Selection();
     34     selection.addSlice(t53track, t53.sliceGroup.slices[0]);
     35     assertEquals(1, selection.length);
     36 
     37     return selection;
     38   };
     39 
     40   var createSelectionWithTwoSlices = function() {
     41     var model = new Model();
     42     var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
     43     t53.sliceGroup.pushSlice(newSliceNamed('a', 0.0, 0.04));
     44     t53.sliceGroup.pushSlice(newSliceNamed('aa', 0.120, 0.06));
     45 
     46     var t53track = {};
     47     t53track.thread = t53;
     48 
     49     var selection = new Selection();
     50     selection.addSlice(t53track, t53.sliceGroup.slices[0]);
     51     selection.addSlice(t53track, t53.sliceGroup.slices[1]);
     52 
     53     return selection;
     54   };
     55 
     56   var createSelectionWithTwoSlicesSameTitle = function() {
     57     var model = new Model();
     58     var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
     59     t53.sliceGroup.pushSlice(newSliceNamed('c', 0.0, 0.04));
     60     t53.sliceGroup.pushSlice(newSliceNamed('c', 0.12, 0.06));
     61 
     62     var t53track = {};
     63     t53track.thread = t53;
     64 
     65     var selection = new Selection();
     66     selection.addSlice(t53track, t53.sliceGroup.slices[0]);
     67     selection.addSlice(t53track, t53.sliceGroup.slices[1]);
     68 
     69     return selection;
     70   };
     71 
     72   test('instantiate_withSingleSlice', function() {
     73     var selection = createSelectionWithSingleSlice();
     74 
     75     var analysisEl = new AnalysisView();
     76     analysisEl.selection = selection;
     77     this.addHTMLOutput(analysisEl);
     78   });
     79 
     80   test('instantiate_withSingleSliceCategory', function() {
     81     var selection = createSelectionWithSingleSlice(true);
     82 
     83     var analysisEl = new AnalysisView();
     84     analysisEl.selection = selection;
     85     this.addHTMLOutput(analysisEl);
     86   });
     87 
     88   test('instantiate_withMultipleSlices', function() {
     89     var selection = createSelectionWithTwoSlices();
     90 
     91     var analysisEl = new AnalysisView();
     92     analysisEl.selection = selection;
     93     this.addHTMLOutput(analysisEl);
     94   });
     95 
     96   test('instantiate_withMultipleSlicesSameTitle', function() {
     97     var selection = createSelectionWithTwoSlicesSameTitle();
     98 
     99     var analysisEl = new AnalysisView();
    100     analysisEl.selection = selection;
    101     this.addHTMLOutput(analysisEl);
    102   });
    103 
    104   test('analyzeSelectionWithSingleSlice', function() {
    105     var selection = createSelectionWithSingleSlice();
    106 
    107     var results = new StubAnalysisResults();
    108     tracing.analysis.analyzeSelection(results, selection);
    109     assertEquals(1, results.tables.length);
    110     var table = results.tables[0];
    111     assertEquals('Selected slice:', table.tableHeader);
    112     assertEquals(3, table.rows.length);
    113 
    114     assertEquals('b', table.rows[0].text);
    115     assertEquals(0, table.rows[1].time);
    116     assertAlmostEquals(0.002, table.rows[2].time);
    117   });
    118 
    119   test('analyzeSelectionWithSingleSliceCategory', function() {
    120     var selection = createSelectionWithSingleSlice(true);
    121 
    122     var results = new StubAnalysisResults();
    123     tracing.analysis.analyzeSelection(results, selection);
    124     assertEquals(1, results.tables.length);
    125     var table = results.tables[0];
    126     assertEquals('Selected slice:', table.tableHeader);
    127     assertEquals(4, table.rows.length);
    128 
    129     assertEquals('b', table.rows[0].text);
    130     assertEquals('foo', table.rows[1].text);
    131     assertEquals(0, table.rows[2].time);
    132     assertAlmostEquals(0.002, table.rows[3].time);
    133   });
    134 
    135   test('analyzeSelectionWithTwoSlices', function() {
    136     var selection = createSelectionWithTwoSlices();
    137 
    138     var results = new StubAnalysisResults();
    139     tracing.analysis.analyzeSelection(results, selection);
    140     assertEquals(1, results.tables.length);
    141     var table = results.tables[0];
    142     assertEquals('Slices:', table.tableHeader);
    143     assertEquals(6, table.rows.length);
    144 
    145     assertEquals('a', table.rows[0].label);
    146     assertEquals(1, table.rows[0].occurences);
    147     assertAlmostEquals(0.04, table.rows[0].duration);
    148     assertEquals('aa', table.rows[1].label);
    149     assertEquals(1, table.rows[1].occurences);
    150     assertAlmostEquals(0.06, table.rows[1].duration);
    151     assertEquals('*Totals', table.rows[2].label);
    152     assertEquals(2, table.rows[2].occurences);
    153     assertAlmostEquals(0.1, table.rows[2].duration);
    154 
    155     assertEquals('Selection start', table.rows[4].label);
    156     assertAlmostEquals(0, table.rows[4].time);
    157 
    158     assertEquals('Selection extent', table.rows[5].label);
    159     assertAlmostEquals(0.18, table.rows[5].time);
    160   });
    161 
    162   test('analyzeSelectionWithTwoSlicesSameTitle', function() {
    163     var selection = createSelectionWithTwoSlicesSameTitle();
    164 
    165     var results = new StubAnalysisResults();
    166     tracing.analysis.analyzeSelection(results, selection);
    167     assertEquals(3, results.tables.length);
    168 
    169     var t;
    170     // Table 1.
    171     t = results.tables[0];
    172     assertEquals('Slices:', t.tableHeader);
    173     assertObjectEquals(
    174         {label: 'c',
    175           duration: 0.1,
    176           occurences: 2,
    177           details: {min: 0.04, max: 0.06, avg: 0.05,
    178             avg_stddev: 0.014142135623730947}
    179         },
    180         t.rows[0]);
    181     assertObjectEquals({label: 'Selection start', time: 0}, t.rows[1]);
    182     assertObjectEquals({label: 'Selection extent', time: 0.18}, t.rows[2]);
    183 
    184     // Table 2.
    185     var t = results.tables[1];
    186     assertObjectEquals({label: 'Title', text: 'c'}, t.rows[0]);
    187     assertObjectEquals({label: 'Start', time: 0}, t.rows[1]);
    188     assertObjectEquals({label: 'Duration', time: 0.04}, t.rows[2]);
    189 
    190     // Table 3.
    191     var t = results.tables[2];
    192     assertObjectEquals({label: 'Title', text: 'c'}, t.rows[0]);
    193     assertObjectEquals({label: 'Start', time: 0.12}, t.rows[1]);
    194     assertObjectEquals({label: 'Duration', time: 0.06}, t.rows[2]);
    195   });
    196 
    197   test('instantiate_withSingleSliceContainingIDRef', function() {
    198     var model = new Model();
    199     var p1 = model.getOrCreateProcess(1);
    200     var myObjectSlice = p1.objects.addSnapshot(
    201         '0x1000', 'cat', 'my_object', 0);
    202 
    203     var t1 = p1.getOrCreateThread(1);
    204     t1.sliceGroup.pushSlice(newSliceCategory('cat', 'b', 0, 2));
    205     t1.sliceGroup.slices[0].args.my_object = myObjectSlice;
    206 
    207     var t1track = {};
    208     t1track.thread = t1;
    209 
    210     var selection = new Selection();
    211     selection.addSlice(t1track, t1.sliceGroup.slices[0]);
    212     assertEquals(1, selection.length);
    213 
    214     var analysisEl = new AnalysisView();
    215     analysisEl.selection = selection;
    216     this.addHTMLOutput(analysisEl);
    217   });
    218 });
    219