15a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang# Copyright 2015 The Chromium OS Authors. All rights reserved. 25a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang# Use of this source code is governed by a BSD-style license that can be 35a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang# found in the LICENSE file. 45a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 55a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang"""An adapter to remotely access the system facade on DUT.""" 65a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 75a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 85a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiangclass SystemFacadeRemoteAdapter(object): 95a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """SystemFacadeRemoteAdapter is an adapter to remotely control DUT system. 105a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 115a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang The Autotest host object representing the remote DUT, passed to this 125a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang class on initialization, can be accessed from its _client property. 135a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 145a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """ 155a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang def __init__(self, host, remote_facade_proxy): 165a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """Construct an SystemFacadeRemoteAdapter. 175a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 185a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @param host: Host object representing a remote host. 195a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @param remote_facade_proxy: RemoteFacadeProxy object. 205a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 215a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """ 225a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang self._client = host 235a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang self._proxy = remote_facade_proxy 245a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 255a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 265a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @property 275a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang def _system_proxy(self): 285a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """Gets the proxy to DUT system facade. 295a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 305a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @return XML RPC proxy to DUT system facade. 315a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 325a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """ 335a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang return self._proxy.system 345a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 355a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 365a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang def set_scaling_governor_mode(self, index, mode): 375a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """Set mode of CPU scaling governor on one CPU of DUT. 385a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 395a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @param index: CPU index starting from 0. 405a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 415a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @param mode: Mode of scaling governor, accept 'interactive' or 425a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 'performance'. 435a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 445a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang @returns: The original mode. 455a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang 465a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang """ 475a4a4207681f4c816dab7d69d3b74e31fea6e1d2Cheng-Yi Chiang return self._system_proxy.set_scaling_governor_mode(index, mode) 48a33503144b8457b16db33e526ec741373ab83b23harpreet 49a33503144b8457b16db33e526ec741373ab83b23harpreet 50a33503144b8457b16db33e526ec741373ab83b23harpreet def get_cpu_usage(self): 51a33503144b8457b16db33e526ec741373ab83b23harpreet """Returns machine's CPU usage. 52a33503144b8457b16db33e526ec741373ab83b23harpreet 53a33503144b8457b16db33e526ec741373ab83b23harpreet Returns: 54a33503144b8457b16db33e526ec741373ab83b23harpreet A dictionary with 'user', 'nice', 'system' and 'idle' values. 55a33503144b8457b16db33e526ec741373ab83b23harpreet Sample dictionary: 56a33503144b8457b16db33e526ec741373ab83b23harpreet { 57a33503144b8457b16db33e526ec741373ab83b23harpreet 'user': 254544, 58a33503144b8457b16db33e526ec741373ab83b23harpreet 'nice': 9, 59a33503144b8457b16db33e526ec741373ab83b23harpreet 'system': 254768, 60a33503144b8457b16db33e526ec741373ab83b23harpreet 'idle': 2859878, 61a33503144b8457b16db33e526ec741373ab83b23harpreet } 62a33503144b8457b16db33e526ec741373ab83b23harpreet """ 63a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.get_cpu_usage() 64a33503144b8457b16db33e526ec741373ab83b23harpreet 65a33503144b8457b16db33e526ec741373ab83b23harpreet 66a33503144b8457b16db33e526ec741373ab83b23harpreet def compute_active_cpu_time(self, cpu_usage_start, cpu_usage_end): 67a33503144b8457b16db33e526ec741373ab83b23harpreet """Computes the fraction of CPU time spent non-idling. 68a33503144b8457b16db33e526ec741373ab83b23harpreet 69a33503144b8457b16db33e526ec741373ab83b23harpreet This function should be invoked using before/after values from calls to 70a33503144b8457b16db33e526ec741373ab83b23harpreet get_cpu_usage(). 71a33503144b8457b16db33e526ec741373ab83b23harpreet """ 72a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.compute_active_cpu_time(cpu_usage_start, 73a33503144b8457b16db33e526ec741373ab83b23harpreet cpu_usage_end) 74a33503144b8457b16db33e526ec741373ab83b23harpreet 75a33503144b8457b16db33e526ec741373ab83b23harpreet 76a33503144b8457b16db33e526ec741373ab83b23harpreet def get_mem_total(self): 77a33503144b8457b16db33e526ec741373ab83b23harpreet """Returns the total memory available in the system in MBytes.""" 78a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.get_mem_total() 79a33503144b8457b16db33e526ec741373ab83b23harpreet 80a33503144b8457b16db33e526ec741373ab83b23harpreet 81a33503144b8457b16db33e526ec741373ab83b23harpreet def get_mem_free(self): 82a33503144b8457b16db33e526ec741373ab83b23harpreet """Returns the currently free memory in the system in MBytes.""" 83a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.get_mem_free() 84a33503144b8457b16db33e526ec741373ab83b23harpreet 85a33503144b8457b16db33e526ec741373ab83b23harpreet 86a33503144b8457b16db33e526ec741373ab83b23harpreet def get_ec_temperatures(self): 87a33503144b8457b16db33e526ec741373ab83b23harpreet """Uses ectool to return a list of all sensor temperatures in Celsius. 88a33503144b8457b16db33e526ec741373ab83b23harpreet """ 89a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.get_ec_temperatures() 90a33503144b8457b16db33e526ec741373ab83b23harpreet 91a33503144b8457b16db33e526ec741373ab83b23harpreet 92a33503144b8457b16db33e526ec741373ab83b23harpreet def get_current_board(self): 93a33503144b8457b16db33e526ec741373ab83b23harpreet """Returns the current device board name.""" 94a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.get_current_board() 95a33503144b8457b16db33e526ec741373ab83b23harpreet 96a33503144b8457b16db33e526ec741373ab83b23harpreet 97a33503144b8457b16db33e526ec741373ab83b23harpreet def get_chromeos_release_version(self): 98a33503144b8457b16db33e526ec741373ab83b23harpreet """Returns chromeos version in device under test as string. None on 99a33503144b8457b16db33e526ec741373ab83b23harpreet fail. 100a33503144b8457b16db33e526ec741373ab83b23harpreet """ 101a33503144b8457b16db33e526ec741373ab83b23harpreet return self._system_proxy.get_chromeos_release_version() 102