blob: 97deaf042c6eb6af180273e67fa2bcbc8bfa7b2d [file] [log] [blame]
#! /usr/bin/env python
# Copyright 2016 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.
"""A script to manipulate device CPU frequency."""
import argparse
import os
import pprint
import sys
if __name__ == '__main__':
sys.path.append(
os.path.abspath(os.path.join(os.path.dirname(__file__),
'..', '..', '..')))
from devil import devil_env
from devil.android import device_utils
from devil.android.perf import perf_control
from devil.utils import run_tests_helper
def SetScalingGovernor(device, args):
p = perf_control.PerfControl(device)
p.SetScalingGovernor(args.governor)
def GetScalingGovernor(device, _args):
p = perf_control.PerfControl(device)
for cpu, governor in p.GetScalingGovernor():
print '%s %s: %s' % (str(device), cpu, governor)
def ListAvailableGovernors(device, _args):
p = perf_control.PerfControl(device)
for cpu, governors in p.ListAvailableGovernors():
print '%s %s: %s' % (str(device), cpu, pprint.pformat(governors))
def main(raw_args):
parser = argparse.ArgumentParser()
parser.add_argument(
'--adb-path',
help='ADB binary path.')
parser.add_argument(
'--device', dest='devices', action='append', default=[],
help='Devices for which the governor should be set. Defaults to all.')
parser.add_argument(
'-v', '--verbose', action='count',
help='Log more.')
subparsers = parser.add_subparsers()
set_governor = subparsers.add_parser('set-governor')
set_governor.add_argument(
'governor',
help='Desired CPU governor.')
set_governor.set_defaults(func=SetScalingGovernor)
get_governor = subparsers.add_parser('get-governor')
get_governor.set_defaults(func=GetScalingGovernor)
list_governors = subparsers.add_parser('list-governors')
list_governors.set_defaults(func=ListAvailableGovernors)
args = parser.parse_args(raw_args)
run_tests_helper.SetLogLevel(args.verbose)
devil_dynamic_config = devil_env.EmptyConfig()
if args.adb_path:
devil_dynamic_config['dependencies'].update(
devil_env.LocalConfigItem(
'adb', devil_env.GetPlatform(), args.adb_path))
devil_env.config.Initialize(configs=[devil_dynamic_config])
devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices)
parallel_devices = device_utils.DeviceUtils.parallel(devices)
parallel_devices.pMap(args.func, args)
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))