1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-01-18 20:11:20 +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.
#
# pylint: disable=unused-argument
from wlauto import Instrument
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.
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()