# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

NAME = "power_LW.tast_power_VideoCall_ash_v_lacros"
METADATA = {
    "contacts": ["chromeos-platform-power@google.com", "yanyeli@google.com"],
    "bug_component": "b:1361410",
    "criteria": "This test is a power benchmark test.",
    "hw_agnostic": False,
    "doc" : "Control file for running tast.power.VideoCall for Ash and"
            "Lacros in power lab. This is done with one control file "
            "instead of two to ensure that both runs of power.VideoCall are"
            "executed on the same DUT, reducing variability. Even if two DUTs "
            "are the same SKU, chip variability means that power consumption "
            "characteristics will differ.",
}

TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"
EXTENDED_TIMEOUT = 24000  # 1.3 hours of VC + 4 hours charging + 0.7 hour guard.
ATTRIBUTES = "suite:lacros_power_dashboard"

from autotest_lib.client.common_lib import utils

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)
test = 'tast'
args_ash = {'test_exprs': ["power.VideoCall.25m_ash"],
            'max_run_sec': 5000,
            'clear_tpm': False,
            'tag': 'ash'}
args_lacros = {'test_exprs': ["power.VideoCall.25m_lacros"],
            'max_run_sec': 5000,
            'clear_tpm': False,
            'tag': 'lacros'}

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("power_BatteryDrainControl", host=host,
                 drain_to_percent=75, tag="ash")
    job.run_test("power_BatteryChargeControl", host=host,
                 percent_charge_to_add=None, percent_target_charge=75,
                 tag="ash")
    job.run_test("power_LW", host=host, test=test, args=args_ash,
                 machine=machine, server_test=True,
                 tag="ash")
    job.run_test("power_BatteryDrainControl", host=host,
                 drain_to_percent=75, tag="lacros")
    job.run_test("power_BatteryChargeControl", host=host,
                 percent_charge_to_add=None, percent_target_charge=75,
                 tag="lacros")
    job.run_test("power_LW", host=host, test=test, args=args_lacros,
                 machine=machine, server_test=True,
                 tag="lacros")

parallel_simple(run, machines)
