1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2024-10-06 19:01:15 +01:00
workload-automation/wlauto/instrumentation/screenon/__init__.py

81 lines
2.6 KiB
Python

# Copyright 2015 ARM Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# pylint: disable=unused-argument
import time
import threading
from wlauto import Instrument, Parameter
from wlauto.exceptions import InstrumentError
class ScreenMonitor(threading.Thread):
def __init__(self, device, polling_period):
super(ScreenMonitor, self).__init__()
self.device = device
self.polling_period = polling_period
self.stop_event = threading.Event()
def run(self):
last_poll = time.time()
while not self.stop_event.is_set():
time.sleep(1)
if (time.time() - last_poll) >= self.polling_period:
self.device.ensure_screen_is_on()
last_poll = time.time()
def stop(self):
self.stop_event.set()
self.join()
class ScreenOnInstrument(Instrument):
# pylint: disable=attribute-defined-outside-init
name = 'screenon'
description = """
Ensure screen is on before each iteration on Android devices.
A very basic instrument that checks that the screen is on on android devices. Optionally,
it call poll the device periodically to ensure that the screen is still on.
"""
parameters = [
Parameter('polling_period', kind=int,
description="""
Set this to a non-zero value to enable periodic (every
``polling_period`` seconds) polling of the screen on
the device to ensure it is on during a run.
"""),
]
def initialize(self, context):
self.monitor = None
if self.device.platform != 'android':
raise InstrumentError('screenon instrument currently only supports Android devices.')
def slow_setup(self, context): # slow to run before most other setups
self.device.ensure_screen_is_on()
if self.polling_period:
self.monitor = ScreenMonitor(self.device, self.polling_period)
self.monitor.start()
def teardown(self, context):
if self.polling_period:
self.monitor.stop()