#!/usr/bin/env python

"""
This file generates all telemetry_Benchmarks control files from a master list.
"""

# This test list is a subset of telemetry benchmark tests. The full list can be
# obtained by executing
# /build/${BOARD}/usr/local/telemetry/src/tools/perf/list_benchmarks

# PLEASE READ THIS:

# PERF_TESTS: these tests run on each build: tot, tot-1, tot-2 and expensive to
# run.

# PERF_DAILY_RUN_TESTS: these tests run on a nightly build: tot. If you are
# trying to gain confidence for a new test, adding your test in this list is a
# good start.

# For adding a new test to any of these lists, please add rohitbm, lafeenstra,
# haddowk in the change.

PERF_TESTS = [
    'jetstream',
    'kraken',
    'octane',
    'page_cycler.typical_25',
    'smoothness.top_25_smooth',
    'speedometer',
    'startup.cold.blank_page',
]

PERF_DAILY_RUN_TESTS = [
    'dromaeo.domcoreattr',
    'dromaeo.domcoremodify',
    'dromaeo.domcorequery',
    'dromaeo.domcoretraverse',
    'image_decoding.image_decoding_measurement',
    'memory.top_7_stress',
    'robohornet_pro',
    'smoothness.tough_animation_cases',
    'smoothness.tough_canvas_cases',
    'smoothness.tough_filters_cases',
    'smoothness.tough_pinch_zoom_cases',
    'smoothness.tough_scrolling_cases',
    'smoothness.tough_webgl_cases',
    'sunspider',
    'tab_switching.top_10',
    'webrtc.webrtc_cases',
]

CONTROLFILE_TEMPLATE = (
"""# Copyright 2014 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.

# Do not edit this file! It was created by generate_controlfiles.py.

from autotest_lib.client.common_lib import utils

AUTHOR = 'sbasi, achuith, rohitbm'
NAME = 'telemetry_Benchmarks.{1}'
ATTRIBUTES = 'suite:{0}'
TIME = 'LONG'
TEST_CATEGORY = 'Benchmark'
TEST_CLASS = 'performance'
TEST_TYPE = 'server'

DOC = '''
This server side test suite executes the Telemetry Benchmark:
{1}
This is part of Chrome for Chrome OS performance testing.

Pass local=True to run with local telemetry and no AFE server.
'''

def run_benchmark(machine):
    host = hosts.create_host(machine)
    job.run_test('telemetry_Benchmarks', host=host,
                 benchmark='{1}',
                 tag='{1}',
                 args=utils.args_to_dict(args))

parallel_simple(run_benchmark, machines)""")

for test in PERF_TESTS + PERF_DAILY_RUN_TESTS:
    filename = 'control.%s' % test
    with open(filename, 'w+') as f:
        if test in PERF_TESTS:
            content = CONTROLFILE_TEMPLATE.format('crosbolt_perf_perbuild', test)
        else:
            content = CONTROLFILE_TEMPLATE.format('crosbolt_perf_nightly', test)
        f.write(content)
