# 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 has been automatically generated. Do not edit!

AUTHOR = 'ARC++ Team'
NAME = 'cheets_CTS_P.9.0_r17.arm.CtsMediaTestCases.VideoDecoderPerfAndEncoderTest.ctshardware'
ATTRIBUTES = 'suite:arc-cts-hardware'
DEPENDENCIES = 'arc'
JOB_RETRIES = 1
TEST_TYPE = 'server'
TIME = 'MEDIUM'
MAX_RESULT_SIZE_KB = 512000
PY_VERSION = 3
DOC = 'Run module CtsMediaTestCases.VideoDecoderPerfAndEncoderTest of the Android Compatibility Test Suite (CTS) using arm ABI in the ARC++ container.'

def run_TS(machine):
    host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_CTS_P',
        hosts=host_list,
        iterations=1,
        needs_push_media=True,
        tag='9.0_r17.arm.CtsMediaTestCases.VideoDecoderPerfAndEncoderTest.ctshardware',
        test_name='cheets_CTS_P.9.0_r17.arm.CtsMediaTestCases.VideoDecoderPerfAndEncoderTest.ctshardware',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsMediaTestCases android.media.cts.VideoDecoderPerfTest', '--include-filter', 'CtsMediaTestCases android.media.cts.VideoEncoderTest', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='CtsMediaTestCases',
        target_plan=None,
        bundle='arm',
        uri='LATEST',
        precondition_commands=['cras_test_client --mute 1'],
        timeout=10800)

parallel_simple(run_TS, machines)
