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

# This file is not managed by generate_controlfiles.py. It was necessary
# to have a separate control file to run the backdrop_filter stories as
# they require the --enable-experimental-web-platform-features flag
# (which should be added by RenderingStorySet - see Chromium source).

from autotest_lib.client.common_lib import utils

AUTHOR = 'Chrome OS Team'
NAME = 'telemetry_Benchmarks.backdrop_filter.rendering.desktop'
ATTRIBUTES = 'suite:crosbolt_perf_perbuild'
TIME = 'LONG'
TEST_CATEGORY = 'Benchmark'
TEST_CLASS = 'performance'
TEST_TYPE = 'server'

DOC = '''
This server side test suite executes the Telemetry Benchmark:
rendering.desktop (but only stories with tag backdrop_filter)
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'] = '--story-tag-filter=backdrop_filter'.split()
    job.run_test('telemetry_Benchmarks', host=host,
                 benchmark='rendering.desktop',
                 tag='rendering.desktop',
                 args=dargs)

parallel_simple(run_benchmark, machines)
