# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Define a type that wraps a Benchmark instance."""
from __future__ import print_function

import math
from scipy import stats

# See crbug.com/673558 for how these are estimated.
_estimated_stddev = {
    'octane': 0.015,
    'kraken': 0.019,
    'speedometer': 0.007,
    'speedometer2': 0.006,
    'dromaeo.domcoreattr': 0.023,
    'dromaeo.domcoremodify': 0.011,
    'graphics_WebGLAquarium': 0.008,
    'page_cycler_v2.typical_25': 0.021,
}


# Get #samples needed to guarantee a given confidence interval, assuming the
# samples follow normal distribution.
def _samples(b):
  # TODO: Make this an option
  # CI = (0.9, 0.02), i.e., 90% chance that |sample mean - true mean| < 2%.
  p = 0.9
  e = 0.02
  if b not in _estimated_stddev:
    return 1
  d = _estimated_stddev[b]
  # Get at least 2 samples so as to calculate standard deviation, which is
  # needed in T-test for p-value.
  n = int(math.ceil((stats.norm.isf((1 - p) / 2) * d / e)**2))
  return n if n > 1 else 2


class Benchmark(object):
  """Class representing a benchmark to be run.

  Contains details of the benchmark suite, arguments to pass to the suite,
  iterations to run the benchmark suite and so on. Note that the benchmark name
  can be different to the test suite name. For example, you may want to have
  two different benchmarks which run the same test_name with different
  arguments.
  """

  def __init__(self,
               name,
               test_name,
               test_args,
               iterations,
               rm_chroot_tmp,
               perf_args,
               suite='',
               show_all_results=False,
               retries=0,
               run_local=False):
    self.name = name
    #For telemetry, this is the benchmark name.
    self.test_name = test_name
    #For telemetry, this is the data.
    self.test_args = test_args
    self.iterations = iterations if iterations > 0 else _samples(name)
    self.perf_args = perf_args
    self.rm_chroot_tmp = rm_chroot_tmp
    self.iteration_adjusted = False
    self.suite = suite
    self.show_all_results = show_all_results
    self.retries = retries
    if self.suite == 'telemetry':
      self.show_all_results = True
    if run_local and self.suite != 'telemetry_Crosperf':
      raise RuntimeError('run_local is only supported by telemetry_Crosperf.')
    self.run_local = run_local
