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

AUTHOR = "Chrome OS Team"
NAME = "power_Idle.perf"
PURPOSE = "Measure power usage when system is idle with perf enabled."
CRITERIA = "This test is a benchmark."
TIME = "SHORT"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "power"
TEST_TYPE = "client"

DOC = """
This test records power related statistics while the system is idling.

    Current tests,

      | test# | seconds | display   | bluetooth |
      -------------------------------------------
      | 1     | 120     | off       | off       |
      | 2     | 120     | default   | off       |
      | 3     | 120     | default   | on - idle |
      | 4     | 120     | off       | on - idle |
"""

args_dict = utils.args_to_dict(args)

kwargs = {
  'pdash_note': args_dict.get('pdash_note', ''),
  'tag': NAME.split('.')[1]
}

if 'idle_secs' in args_dict:
  kwargs['idle_secs'] = float(args_dict['idle_secs'])

if 'warmup_secs' in args_dict:
  kwargs['warmup_secs'] = float(args_dict['warmup_secs'])

job.default_profile_only = True
job.profilers.add('top')
job.profilers.add('turbostat')
job.profilers.add('cros_perf', interval=30)

job.run_test('power_Idle', **kwargs)

job.profilers.delete('cros_perf')
job.profilers.delete('top')
job.profilers.delete('turbostat')
