# Copyright 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.

"""Config file for Run Performance Test Bot

This script is intended for use by anyone that wants to run a remote performance
test. Modify the config below and add the command to run the performance test,
the metric you're interested in, and repeat/discard parameters. You can then
run a git try <bot>.

Changes to this file should never be submitted.

Args:
  'command': This is the full command line to pass to the
      bisect-perf-regression.py script in order to execute the test.
  'metric': The name of the metric to parse out from the results of the
      performance test. You can retrieve the metric by looking at the stdio of
      the performance test. Look for lines of the format:

      RESULT <graph>: <trace>= <value> <units>

      The metric name is "<graph>/<trace>".
  'repeat_count': The number of times to repeat the performance test.
  'max_time_minutes': The script will attempt to run the performance test
      "repeat_count" times, unless it exceeds "max_time_minutes".
  'truncate_percent': Discard the highest/lowest % values from performance test.

Sample config:

config = {
  'command': './tools/perf/run_measurement --browser=release blink_perf third_party/WebKit/PerformanceTests/Layout/floats_50_100.html',
  'metric': 'floats_50_100/floats_50_100',
  'repeat_count': '20',
  'max_time_minutes': '20',
  'truncate_percent': '25',
}

On Windows:
  - If you're calling a python script you will need to add "python" to
the command:

config = {
  'command': 'python tools/perf/run_measurement -v --browser=release kraken',
  'metric': 'Total/Total',
  'repeat_count': '20',
  'max_time_minutes': '20',
  'truncate_percent': '25',
}


On ChromeOS:
  - Script accepts either ChromeOS versions, or unix timestamps as revisions.
  - You don't need to specify --identity and --remote, they will be added to
    the command using the bot's BISECT_CROS_IP and BISECT_CROS_BOARD values.

config = {
  'command': './tools/perf/run_measurement -v '\
      '--browser=cros-chrome-guest '\
      'dromaeo tools/perf/page_sets/dromaeo/jslibstylejquery.json',
  'metric': 'jslib/jslib',
  'repeat_count': '20',
  'max_time_minutes': '20',
  'truncate_percent': '25',
}

"""

config = {
  'command': '',
  'metric': '',
  'repeat_count': '',
  'max_time_minutes': '',
  'truncate_percent': '',
}

# Workaround git try issue, see crbug.com/257689
