1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-01-31 10:11:17 +00:00

Merge pull request #271 from marcbonnici/revent

ReventWorkload fixes and enhancements
This commit is contained in:
setrofim 2016-10-26 11:25:46 +01:00 committed by GitHub
commit 4213e8e7d1
4 changed files with 20 additions and 6 deletions

View File

@ -246,7 +246,7 @@ definition.yaml file
This defines each state of the workload and lists which templates are expected
to be found and how many are required to be detected for a conclusive match. It
also defines the expected state in each workload phase where a state detection
is run (currently those are setupComplete and runComplete).
is run (currently those are setup_complete and run_complete).
Templates are picture elements to be matched in a screenshot. Each template
mentioned in the definition file should be placed as a file with the same name
@ -260,7 +260,7 @@ understand the format. Note that more than just two states (for the afterSetup
and afterRun phase) can be defined and this helps track the cause of errors in
case an unexpected state is encountered.
.. code-block:: python
.. code-block:: yaml
workload_name: angrybirds

View File

@ -101,6 +101,8 @@ class RecordCommand(ReventCommand):
self.parser.add_argument('-p', '--package', help='Package to launch before recording')
self.parser.add_argument('-C', '--clear', help='Clear app cache before launching it',
action="store_true")
self.parser.add_argument('-S', '--capture-screen', help='Record a screen capture after recording',
action="store_true")
def run(self, args):
if args.device:
@ -128,6 +130,9 @@ class RecordCommand(ReventCommand):
self.logger.info("Press Enter when you have finished recording...")
raw_input("")
if args.screencapture:
self.logger.info("Recording screen capture")
self.device.capture_screen(args.output or os.getcwdu())
self.device.killall("revent", signal.SIGTERM)
self.logger.info("Waiting for revent to finish")
while self.device.get_pids_of("revent"):

View File

@ -240,7 +240,7 @@ class ApkWorkload(Workload):
context.add_classifiers(apk_version=self.apk_version)
if self.launch_main:
self.launch_package() # launch default activity without intent data
self.launch_package() # launch default activity without intent data
self.device.execute('am kill-all') # kill all *background* activities
self.device.clear_logcat()
@ -439,6 +439,7 @@ AndroidBenchmark = ApkWorkload # backward compatibility
class ReventWorkload(Workload):
# pylint: disable=attribute-defined-outside-init
def __init__(self, device, _call_super=True, **kwargs):
if _call_super:
@ -452,7 +453,9 @@ class ReventWorkload(Workload):
self.on_device_setup_revent = None
self.on_device_run_revent = None
self.statedefs_dir = None
self.check_states = None
if self.check_states:
state_detector.check_match_state_dependencies()
def setup(self, context):
self.revent_setup_file = context.resolver.get(ReventFile(self, 'setup'))

View File

@ -40,6 +40,8 @@ try:
except ImportError:
imutils = None
from wlauto.exceptions import HostError
class StateDefinitionError(RuntimeError):
pass
@ -58,10 +60,14 @@ def auto_canny(image, sigma=0.33):
return edged
def check_match_state_dependencies():
if np is None or cv2 is None or imutils is None:
raise HostError("State detection requires numpy, opencv (cv2) and imutils.")
def match_state(screenshot_file, defpath, state_definitions): # pylint: disable=too-many-locals
# check dependencies
if np is None or cv2 is None or imutils is None:
raise RuntimeError("State detection requires numpy, opencv (cv2) and imutils.")
check_match_state_dependencies()
# check if file exists, then load screenshot into opencv and create edge map
if not os.path.isfile(screenshot_file):