diff options
author | rnephew <rnephew@chromium.org> | 2015-11-02 12:50:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-02 20:51:35 +0000 |
commit | 07b89816e19ddc23e0de9cff0e402fd3e39bc58b (patch) | |
tree | 94c3e9eba8b28b1d89db389cf328309fe55dc167 /build/android | |
parent | efab199bff6dbb40e60761bed6ef0e274096f6d9 (diff) | |
download | chromium_src-07b89816e19ddc23e0de9cff0e402fd3e39bc58b.zip chromium_src-07b89816e19ddc23e0de9cff0e402fd3e39bc58b.tar.gz chromium_src-07b89816e19ddc23e0de9cff0e402fd3e39bc58b.tar.bz2 |
[Android] Add ability to ensure screen is on before running tests.
BUG=546837
Review URL: https://codereview.chromium.org/1406273006
Cr-Commit-Position: refs/heads/master@{#357424}
Diffstat (limited to 'build/android')
-rw-r--r-- | build/android/devil/android/device_utils.py | 49 | ||||
-rwxr-xr-x | build/android/devil/android/device_utils_test.py | 96 | ||||
-rw-r--r-- | build/android/pylib/perf/test_runner.py | 1 |
3 files changed, 140 insertions, 6 deletions
diff --git a/build/android/devil/android/device_utils.py b/build/android/devil/android/device_utils.py index b169240..66485c5 100644 --- a/build/android/devil/android/device_utils.py +++ b/build/android/devil/android/device_utils.py @@ -2081,3 +2081,52 @@ class DeviceUtils(object): logging.warning('Possible problem when granting permissions. Blacklist ' 'may need to be updated.') logging.warning(output) + + @decorators.WithTimeoutAndRetriesFromInstance() + def IsScreenOn(self, timeout=None, retries=None): + """Determines if screen is on. + + Dumpsys input_method exposes screen on/off state. Below is an explination of + the states. + + Pre-L: + On: mScreenOn=true + Off: mScreenOn=false + L+: + On: mInteractive=true + Off: mInteractive=false + + Returns: + True if screen is on, false if it is off. + + Raises: + device_errors.CommandFailedError: If screen state cannot be found. + """ + if self.build_version_sdk < version_codes.LOLLIPOP: + input_check = 'mScreenOn' + check_value = 'mScreenOn=true' + else: + input_check = 'mInteractive' + check_value = 'mInteractive=true' + dumpsys_out = self._RunPipedShellCommand( + 'dumpsys input_method | grep %s' % input_check) + if not dumpsys_out: + raise device_errors.CommandFailedError( + 'Unable to detect screen state', str(self)) + return check_value in dumpsys_out[0] + + @decorators.WithTimeoutAndRetriesFromInstance() + def SetScreen(self, on, timeout=None, retries=None): + """Turns screen on and off. + + Args: + on: bool to decide state to switch to. True = on False = off. + """ + def screen_test(): + return self.IsScreenOn() == on + + if screen_test(): + logging.info('Screen already in expected state.') + return + self.RunShellCommand('input keyevent 26') + timeout_retry.WaitFor(screen_test, wait_period=1) diff --git a/build/android/devil/android/device_utils_test.py b/build/android/devil/android/device_utils_test.py index 99d3c83..09c527e 100755 --- a/build/android/devil/android/device_utils_test.py +++ b/build/android/devil/android/device_utils_test.py @@ -2098,13 +2098,13 @@ class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest): def testGrantPermissions_underM(self): with self.patch_call(self.call.device.build_version_sdk, - return_value=20): + return_value=version_codes.LOLLIPOP): self.device.GrantPermissions('package', ['p1']) def testGrantPermissions_one(self): permissions_cmd = 'pm grant package p1' with self.patch_call(self.call.device.build_version_sdk, - return_value=23): + return_value=version_codes.MARSHMALLOW): with self.assertCalls( (self.call.device.RunShellCommand(permissions_cmd), [])): self.device.GrantPermissions('package', ['p1']) @@ -2112,7 +2112,7 @@ class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest): def testGrantPermissions_multiple(self): permissions_cmd = 'pm grant package p1;pm grant package p2' with self.patch_call(self.call.device.build_version_sdk, - return_value=23): + return_value=version_codes.MARSHMALLOW): with self.assertCalls( (self.call.device.RunShellCommand(permissions_cmd), [])): self.device.GrantPermissions('package', ['p1', 'p2']) @@ -2122,19 +2122,103 @@ class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest): 'pm grant package android.permission.WRITE_EXTERNAL_STORAGE;' 'pm grant package android.permission.READ_EXTERNAL_STORAGE') with self.patch_call(self.call.device.build_version_sdk, - return_value=23): + return_value=version_codes.MARSHMALLOW): with self.assertCalls( (self.call.device.RunShellCommand(permissions_cmd), [])): self.device.GrantPermissions( 'package', ['android.permission.WRITE_EXTERNAL_STORAGE']) def testGrantPermissions_BlackList(self): - with self.patch_call( - self.call.device.build_version_sdk, return_value=23): + with self.patch_call(self.call.device.build_version_sdk, + return_value=version_codes.MARSHMALLOW): self.device.GrantPermissions( 'package', ['android.permission.ACCESS_MOCK_LOCATION']) +class DeviecUtilsIsScreenOn(DeviceUtilsTest): + + _L_SCREEN_ON = ['test=test mInteractive=true'] + _K_SCREEN_ON = ['test=test mScreenOn=true'] + _L_SCREEN_OFF = ['mInteractive=false'] + _K_SCREEN_OFF = ['mScreenOn=false'] + + def testIsScreenOn_onPreL(self): + with self.patch_call(self.call.device.build_version_sdk, + return_value=version_codes.KITKAT): + with self.assertCalls( + (self.call.device._RunPipedShellCommand( + 'dumpsys input_method | grep mScreenOn'), self._K_SCREEN_ON)): + self.assertTrue(self.device.IsScreenOn()) + + def testIsScreenOn_onL(self): + with self.patch_call(self.call.device.build_version_sdk, + return_value=version_codes.LOLLIPOP): + with self.assertCalls( + (self.call.device._RunPipedShellCommand( + 'dumpsys input_method | grep mInteractive'), self._L_SCREEN_ON)): + self.assertTrue(self.device.IsScreenOn()) + + def testIsScreenOn_offPreL(self): + with self.patch_call(self.call.device.build_version_sdk, + return_value=version_codes.KITKAT): + with self.assertCalls( + (self.call.device._RunPipedShellCommand( + 'dumpsys input_method | grep mScreenOn'), self._K_SCREEN_OFF)): + self.assertFalse(self.device.IsScreenOn()) + + def testIsScreenOn_offL(self): + with self.patch_call(self.call.device.build_version_sdk, + return_value=version_codes.LOLLIPOP): + with self.assertCalls( + (self.call.device._RunPipedShellCommand( + 'dumpsys input_method | grep mInteractive'), self._L_SCREEN_OFF)): + self.assertFalse(self.device.IsScreenOn()) + + def testIsScreenOn_noOutput(self): + with self.patch_call(self.call.device.build_version_sdk, + return_value=version_codes.LOLLIPOP): + with self.assertCalls( + (self.call.device._RunPipedShellCommand( + 'dumpsys input_method | grep mInteractive'), [])): + with self.assertRaises(device_errors.CommandFailedError): + self.device.IsScreenOn() + + +class DeviecUtilsSetScreen(DeviceUtilsTest): + + @mock.patch('time.sleep', mock.Mock()) + def testSetScren_alreadySet(self): + with self.assertCalls( + (self.call.device.IsScreenOn(), False)): + self.device.SetScreen(False) + + @mock.patch('time.sleep', mock.Mock()) + def testSetScreen_on(self): + with self.assertCalls( + (self.call.device.IsScreenOn(), False), + (self.call.device.RunShellCommand('input keyevent 26'), []), + (self.call.device.IsScreenOn(), True)): + self.device.SetScreen(True) + + + @mock.patch('time.sleep', mock.Mock()) + def testSetScreen_off(self): + with self.assertCalls( + (self.call.device.IsScreenOn(), True), + (self.call.device.RunShellCommand('input keyevent 26'), []), + (self.call.device.IsScreenOn(), False)): + self.device.SetScreen(False) + + @mock.patch('time.sleep', mock.Mock()) + def testSetScreen_slow(self): + with self.assertCalls( + (self.call.device.IsScreenOn(), True), + (self.call.device.RunShellCommand('input keyevent 26'), []), + (self.call.device.IsScreenOn(), True), + (self.call.device.IsScreenOn(), True), + (self.call.device.IsScreenOn(), False)): + self.device.SetScreen(False) + if __name__ == '__main__': logging.getLogger().setLevel(logging.DEBUG) unittest.main(verbosity=2) diff --git a/build/android/pylib/perf/test_runner.py b/build/android/pylib/perf/test_runner.py index 6beb117..a580fd4 100644 --- a/build/android/pylib/perf/test_runner.py +++ b/build/android/pylib/perf/test_runner.py @@ -350,6 +350,7 @@ class TestRunner(base_test_runner.BaseTestRunner): if self._options.min_battery_level: self._device_battery.ChargeDeviceToLevel( self._options.min_battery_level) + self.device.SetScreen(True) logging.info('%s : %s', test_name, cmd) start_time = time.time() |