1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-03-21 18:18:41 +00:00

utils/revent: Refactor ReventRecording to avoid duplicate target calls

Changed location of revent binary on target to be a class attribute so that
it is shared across all instances. Also changed discovery method to a
static method which can be memoized to prevent the target being queried
unnecessarily.
This commit is contained in:
Marc Bonnici 2017-12-12 16:56:05 +00:00 committed by setrofim
parent b1a15b3458
commit 950427f478

View File

@ -21,6 +21,9 @@ from datetime import datetime
from collections import namedtuple
from wa.framework.resource import Executable, NO_ONE, ResourceResolver
from wa.utils.exec_control import once_per_class
from devlib.utils.misc import memoized
GENERAL_MODE = 0
GAMEPAD_MODE = 1
@ -270,21 +273,28 @@ def get_revent_binary(abi):
class ReventRecorder(object):
# Share location of target excutable across all instances
target_executable = None
def __init__(self, target):
self.target = target
self.executable = self.target.get_installed('revent')
if not ReventRecorder.target_executable:
ReventRecorder.target_executable = self._get_target_path(self.target)
@once_per_class
def deploy(self):
if not self.executable:
host_executable = get_revent_binary(self.target.abi)
self.executable = self.target.install(host_executable)
if not ReventRecorder.target_executable:
ReventRecorder.target_executable = self.target.get_installed('revent')
host_executable = get_revent_binary(self.target.abi)
ReventRecorder.target_executable = self.target.install(host_executable)
@once_per_class
def remove(self):
if self.executable:
if ReventRecorder.target_executable:
self.target.uninstall('revent')
def start_record(self, revent_file):
command = '{} record -s {}'.format(self.executable, revent_file)
command = '{} record -s {}'.format(ReventRecorder.target_executable, revent_file)
self.target.kick_off(command, self.target.is_rooted)
def stop_record(self):
@ -292,5 +302,10 @@ class ReventRecorder(object):
def replay(self, revent_file, timeout=None):
self.target.killall('revent')
command = "{} replay {}".format(self.executable, revent_file)
command = "{} replay {}".format(ReventRecorder.target_executable, revent_file)
self.target.execute(command, timeout=timeout)
@memoized
@staticmethod
def _get_target_path(target):
return target.get_installed('revent')