# Copyright 2018 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.mash.cros_ui_smoothness'
ATTRIBUTES = 'suite:crosbolt_perf_nightly'
TIME = 'LONG'
TEST_CATEGORY = 'Benchmark'
TEST_CLASS = 'performance'
TEST_TYPE = 'server'

DOC = '''
This server side test suite executes the Telemetry Benchmark:
cros_ui_smoothness
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)
    dargs = utils.args_to_dict(args)
    dargs['extra_args'] = '--extra-browser-args=--enable-features=SingleProcessMash'.split()
    job.run_test('telemetry_Benchmarks', host=host,
                 benchmark='cros_ui_smoothness',
                 tag='cros_ui_smoothness',
                 args=dargs)

parallel_simple(run_benchmark, machines)
