# Copyright (c) 2013 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.

from autotest_lib.client.common_lib import utils
from autotest_lib.server import utils as server_utils

AUTHOR = "cmtice@chromium.org c-compiler-chrome@google.com"
NAME = "telemetry_Crosperf"
TIME = "LONG"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "performance"
TEST_TYPE = "server"

DOC = """
This runs various Telemetry performance tests under the crosperf script.
This is part of Chrome OS Toolchain testing platform.
"""

profiler = None
p_args = []

# Put the args into the args_dict.
args_dict = utils.args_to_dict(args)

if 'profiler' in args_dict:
   profiler = args_dict['profiler']
   if 'profiler_args' in args_dict:
      p_args   = args_dict['profiler_args']

if profiler:
   job.default_profile_only = True
   job.profilers.add(profiler, p_args)

def run_telemetry_Crosperf(machine):
    dut = hosts.create_host(machine)
    hostname, _ = server_utils.get_host_info_from_machine(machine)
    job.run_test('telemetry_Crosperf', client_ip=hostname,
                  args=args_dict, dut=dut)

# run the test in multiple machines

job.parallel_simple(run_telemetry_Crosperf, machines)

if profiler:
   job.profilers.delete (profiler)
