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