# Copyright 2020 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.power_VideoPlayback"
METADATA = {
    "contacts": ["chromeos-platform-power@google.com", "puthik@google.com"],
    "bug_component": "b:1361410",
    "criteria": "This test is a power benchmark with different display playbacks.",
    "hw_agnostic": False,
    "doc" : "Control file for running power_VideoPlayback in power lab.",
}
TEST_TYPE = "server"
# ATTRIBUTES = "suite:power_dashboard_weekly"
DEPENDENCIES = "servo_state:WORKING"

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 = 'power_VideoPlayback'
args = {'pdash_note': args_dict.get('pdash_note', '')}

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("power_BatteryChargeControl", host=host,
                 percent_charge_to_add=None, percent_target_charge=70,
                 tag=NAME.split('.')[1])
    job.run_test("power_BatteryDrainControl", host=host,
                 drain_to_percent=70, tag=NAME.split('.')[1])
    job.run_test("power_LW", host=host, test=test, args=args,
                 machine=machine, tag=NAME.split('.')[1])

parallel_simple(run, machines)
