1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-02-07 13:41:24 +00:00

Updating screen on instrument to support periodic polling.

This commit is contained in:
Sergei Trofimov 2015-04-15 17:54:07 +01:00
parent fcc970db3f
commit 3e6b927cde

View File

@ -13,24 +13,68 @@
# limitations under the License. # limitations under the License.
# #
# pylint: disable=unused-argument # pylint: disable=unused-argument
from wlauto import Instrument import time
import threading
from wlauto import Instrument, Parameter
from wlauto.exceptions import InstrumentError 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): class ScreenOnInstrument(Instrument):
# pylint: disable=attribute-defined-outside-init
name = 'screenon' name = 'screenon'
description = """ description = """
Ensure screen is on before each iteration on Android devices. Ensure screen is on before each iteration on Android devices.
A very basic instrument that checks that the screen is on 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): def initialize(self, context):
self.monitor = None
if self.device.platform != 'android': if self.device.platform != 'android':
raise InstrumentError('screenon instrument currently only supports Android devices.') raise InstrumentError('screenon instrument currently only supports Android devices.')
def slow_setup(self, context): # slow to run before most other setups def slow_setup(self, context): # slow to run before most other setups
self.device.ensure_screen_is_on() 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()