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

# This file was hand-created from webrtc.stress (which in turn
# is generated by generate_controlfiles.py). The purpose is to
# run tests on the Buddy board with onboard Kepler hardware.

from autotest_lib.client.common_lib import utils

AUTHOR = 'sbasi, achuith, rohitbm'
NAME = 'telemetry_Benchmarks.webrtc.stress.buddy.kepler'
ATTRIBUTES = 'suite:crosbolt_perf_nightly'
TIME = 'LONG'
TEST_CATEGORY = 'Benchmark'
TEST_CLASS = 'performance'
TEST_TYPE = 'server'
DEPENDENCIES = "board:buddy, hw_video_acc_enc_vp8"

DOC = '''
This server side test suite executes the Telemetry Benchmark:
webrtc.stress
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='webrtc.stress',
                 tag='webrtc.stress.buddy.kepler',
                 args=utils.args_to_dict(args))

parallel_simple(run_benchmark, machines)
