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.analysis.util');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('ui');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('tracing.analysis', function() {
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  function analyzeSingleCounterSampleHit(results, counterSampleHit) {
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var ctr = counterSampleHit.counter;
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var sampleIndex = counterSampleHit.sampleIndex;
146833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var values = [];
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    for (var i = 0; i < ctr.numSeries; ++i)
176833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      values.push(ctr.getSeries(i).getSample(sampleIndex).value);
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var table = results.appendTable('analysis-counter-table', 2);
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    results.appendTableHeader(table, 'Selected counter:');
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    results.appendSummaryRow(table, 'Title', ctr.name);
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    results.appendSummaryRowTime(
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        table, 'Timestamp', ctr.timestamps[sampleIndex]);
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    for (var i = 0; i < ctr.numSeries; i++)
266833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      results.appendSummaryRow(table, ctr.getSeries(i).name, values[i]);
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  function analyzeMultipleCounterSampleHits(results, counterSampleHits) {
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var hitsByCounter = {};
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    for (var i = 0; i < counterSampleHits.length; i++) {
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      var ctr = counterSampleHits[i].counter;
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      if (!hitsByCounter[ctr.guid])
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        hitsByCounter[ctr.guid] = [];
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      hitsByCounter[ctr.guid].push(counterSampleHits[i]);
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    }
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
386833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    var table = results.appendTable('analysis-counter-table', 2);
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    results.appendTableHeader(table, 'Counters:');
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    for (var id in hitsByCounter) {
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      var hits = hitsByCounter[id];
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      var ctr = hits[0].counter;
436833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      var sampleIndices = [];
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      for (var i = 0; i < hits.length; i++)
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        sampleIndices.push(hits[i].sampleIndex);
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      var stats = ctr.getSampleStatistics(sampleIndices);
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      for (var i = 0; i < stats.length; i++) {
506833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis        var samples = [];
516833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis        for (var k = 0; k < sampleIndices.length; ++k)
526833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          samples.push(ctr.getSeries(i).getSample(sampleIndices[k]).value);
536833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        results.appendDataRow(
556833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            table,
566833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            ctr.name + ': series(' + ctr.getSeries(i).name + ')',
576833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            samples,
586833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            samples.length,
596833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            stats[i]);
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      }
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    }
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  return {
6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    analyzeSingleCounterSampleHit: analyzeSingleCounterSampleHit,
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    analyzeMultipleCounterSampleHits: analyzeMultipleCounterSampleHits
6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
69