<!DOCTYPE html>
<!--
Copyright (c) 2013 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/core/trace_model/event.html">
<link rel="import" href="/base/iteration_helpers.html">
<link rel="import" href="/core/analysis/util.html">
<link rel="import" href="/base/sorted_array_utils.html">

<script>
'use strict';

tv.exportTo('tv.c.trace_model', function() {
  function CounterSample(series, timestamp, value) {
    tv.c.trace_model.Event.call(this);
    this.series_ = series;
    this.timestamp_ = timestamp;
    this.value_ = value;
  }

  CounterSample.groupByTimestamp = function(samples) {
    var samplesByTimestamp = {};
    for (var i = 0; i < samples.length; i++) {
      var sample = samples[i];
      var ts = sample.timestamp;
      if (!samplesByTimestamp[ts])
        samplesByTimestamp[ts] = [];
      samplesByTimestamp[ts].push(sample);
    }
    var timestamps = tv.b.dictionaryKeys(samplesByTimestamp);
    timestamps.sort();
    var groups = [];
    for (var i = 0; i < timestamps.length; i++) {
      var ts = timestamps[i];
      var group = samplesByTimestamp[ts];
      group.sort(function(x, y) {
        return x.series.seriesIndex - y.series.seriesIndex;
      });
      groups.push(group);
    }
    return groups;
  }

  CounterSample.prototype = {
    __proto__: tv.c.trace_model.Event.prototype,

    get series() {
      return this.series_;
    },

    get timestamp() {
      return this.timestamp_;
    },

    get value() {
      return this.value_;
    },

    set timestamp(timestamp) {
      this.timestamp_ = timestamp;
    },

    addBoundsToRange: function(range) {
      range.addValue(this.timestamp);
    },

    getSampleIndex: function() {
      return tv.b.findLowIndexInSortedArray(
          this.series.timestamps,
          function(x) { return x; },
          this.timestamp_);
    },

    get userFriendlyName() {
      return 'Counter sample from ' + this.series_.title + ' at ' +
          tv.c.analysis.tsString(this.timestamp);
    }
  };


  tv.c.trace_model.EventRegistry.register(
      CounterSample,
      {
        name: 'counterSample',
        pluralName: 'counterSamples',
        singleViewElementName: 'tv-c-counter-sample-sub-view',
        multiViewElementName: 'tv-c-counter-sample-sub-view'
      });

  return {
    CounterSample: CounterSample
  };
});
</script>
