# Copyright 2022 The ChromiumOS Authors
# 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

NAME = 'telemetry_Benchmarks.rendering.desktop'
METADATA = {
    'contacts': ['cros-sw-perf@google.com'],
    'bug_component': 'b:1045832',  # ChromeOS > Software > Performance > TPS
    'criteria': ('Executes the Telemetry Benchmark: rendering.desktop. '
                 'Pass local=True to run with local telemetry and no AFE '
                 'server.'),
    'hw_agnostic': False
}
ATTRIBUTES = 'suite:crosbolt_perf_perbuild'
TEST_TYPE = 'server'

def run_benchmark(machine):
    host = hosts.create_host(machine)
    dargs = utils.args_to_dict(args)
    dargs['extra_args'] = '--story-tag-filter=top_real_world_desktop'.split()
    job.run_test('telemetry_Benchmarks', host=host,
                 benchmark='rendering.desktop',
                 tag='rendering.desktop',
                 args=dargs)

parallel_simple(run_benchmark, machines)
