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:
parent
fcc970db3f
commit
3e6b927cde
@ -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()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user