Source code for wlauto.instrumentation.screenon

#    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


[docs]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()
[docs] 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()
[docs] def stop(self): self.stop_event.set() self.join()
[docs]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.')
[docs] 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()
[docs] def teardown(self, context): if self.polling_period: self.monitor.stop()