• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2010 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
5from autotest_lib.client.bin import test
6from autotest_lib.client.common_lib import error
7from autotest_lib.client.cros import power_suspend
8
9
10# In cases like crosbug.com/p/26289, we want results, but also want
11# to make sure we are suspending quickly enough. Retry with this amount
12# of extra suspend time to make sure we can get some results, even
13# if we throw a warning.
14EXTRA_TIME = 10
15
16
17class power_Resume(test.test):
18    """class for power_Resume test."""
19    version = 1
20    preserve_srcdir = True
21
22    def initialize(self, suspend_state=''):
23        """
24        Entry point.
25
26        @param suspend_state: Force to suspend to a specific
27                state ("mem" or "freeze"). If the string is empty, suspend
28                state is left to the default pref on the system.
29        """
30        self._suspender = power_suspend.Suspender(self.resultsdir,
31                throw=True, device_times=True,
32                suspend_state=suspend_state)
33
34
35    def run_once(self, max_devs_returned=10, seconds=0,
36                 ignore_kernel_warns=False):
37        try:
38            self._suspend_once(max_devs_returned, seconds, ignore_kernel_warns)
39        except error.TestWarn:
40            self._suspend_once(max_devs_returned, seconds + EXTRA_TIME,
41                               ignore_kernel_warns)
42            raise
43
44
45    def _suspend_once(self, max_devs_returned, seconds, ignore_kernel_warns):
46        (results, device_times) = \
47            self._suspender.suspend(seconds,
48                                    ignore_kernel_warns=ignore_kernel_warns)
49
50        # return as keyvals the slowest n devices
51        slowest_devs = sorted(
52            device_times,
53            key=device_times.get,
54            reverse=True)[:max_devs_returned]
55        for dev in slowest_devs:
56            results[dev] = device_times[dev]
57
58        self.output_perf_value(description='system_suspend',
59                               value=results['seconds_system_suspend'],
60                               units='sec', higher_is_better=False)
61        self.output_perf_value(description='system_resume',
62                               value=results['seconds_system_resume'],
63                               units='sec', higher_is_better=False)
64        self.write_perf_keyval(results)
65