# Copyright 2018 The Chromium 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

AUTHOR = 'dave.rodgman@arm.com'
NAME = 'kernel_IdlePerf'
PURPOSE = 'Test performance impact of idle'
CRITERIA = 'This test will fail if performance drops when CPU idle is enabled'
ATTRIBUTES = 'suite:crosbolt_perf_weekly'
TIME = 'MEDIUM'
TEST_CATEGORY = 'Performance'
TEST_CLASS = 'kernel'
TEST_TYPE = 'server'

DOC = '''
This server side test suite tests for performance regressions where enabling
CPU idle hurts latency-sensitive workloads (e.g., smooth scrolling).

This is done by running smoothness.top_25_smooth and comparing results for
idle enabled vs. disabled: ideally, there should be only a very small impact.

This test currently only supports Arm aarch64.

Pass local=True to run with local telemetry and no AFE server.
'''

def run_benchmark(machine):
    host = hosts.create_host(machine)
    job.run_test('kernel_IdlePerf', host=host,
                 args=utils.args_to_dict(args))

parallel_simple(run_benchmark, machines)
