1# Copyright 2015 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5"""Facade to access the system-related functionality.""" 6 7import os 8 9from autotest_lib.client.bin import utils 10 11 12class SystemFacadeNativeError(Exception): 13 """Error in SystemFacadeNative.""" 14 pass 15 16 17class SystemFacadeNative(object): 18 """Facede to access the system-related functionality. 19 20 The methods inside this class only accept Python native types. 21 22 """ 23 SCALING_GOVERNOR_MODES = [ 24 'interactive', 25 'performance', 26 'ondemand', 27 'powersave', 28 'sched' 29 ] 30 31 def set_scaling_governor_mode(self, index, mode): 32 """Set mode of CPU scaling governor on one CPU. 33 34 @param index: CPU index starting from 0. 35 36 @param mode: Mode of scaling governor, accept 'interactive' or 37 'performance'. 38 39 @returns: The original mode. 40 41 """ 42 if mode not in self.SCALING_GOVERNOR_MODES: 43 raise SystemFacadeNativeError('mode %s is invalid' % mode) 44 45 governor_path = os.path.join( 46 '/sys/devices/system/cpu/cpu%d' % index, 47 'cpufreq/scaling_governor') 48 if not os.path.exists(governor_path): 49 raise SystemFacadeNativeError( 50 'scaling governor of CPU %d is not available' % index) 51 52 original_mode = utils.read_one_line(governor_path) 53 utils.open_write_close(governor_path, mode) 54 55 return original_mode 56 57 58 def get_cpu_usage(self): 59 """Returns machine's CPU usage. 60 61 Returns: 62 A dictionary with 'user', 'nice', 'system' and 'idle' values. 63 Sample dictionary: 64 { 65 'user': 254544, 66 'nice': 9, 67 'system': 254768, 68 'idle': 2859878, 69 } 70 """ 71 return utils.get_cpu_usage() 72 73 74 def compute_active_cpu_time(self, cpu_usage_start, cpu_usage_end): 75 """Computes the fraction of CPU time spent non-idling. 76 77 This function should be invoked using before/after values from calls to 78 get_cpu_usage(). 79 """ 80 return utils.compute_active_cpu_time(cpu_usage_start, 81 cpu_usage_end) 82 83 84 def get_mem_total(self): 85 """Returns the total memory available in the system in MBytes.""" 86 return utils.get_mem_total() 87 88 89 def get_mem_free(self): 90 """Returns the currently free memory in the system in MBytes.""" 91 return utils.get_mem_free() 92 93 94 def get_ec_temperatures(self): 95 """Uses ectool to return a list of all sensor temperatures in Celsius. 96 """ 97 return utils.get_ec_temperatures() 98 99 100 def get_current_board(self): 101 """Returns the current device board name.""" 102 return utils.get_current_board() 103 104 105 def get_chromeos_release_version(self): 106 """Returns chromeos version in device under test as string. None on 107 fail. 108 """ 109 return utils.get_chromeos_release_version() 110