mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-03-22 10:38:37 +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:
parent
b1a15b3458
commit
950427f478
@ -21,6 +21,9 @@ from datetime import datetime
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
from wa.framework.resource import Executable, NO_ONE, ResourceResolver
|
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
|
GENERAL_MODE = 0
|
||||||
GAMEPAD_MODE = 1
|
GAMEPAD_MODE = 1
|
||||||
@ -270,21 +273,28 @@ def get_revent_binary(abi):
|
|||||||
|
|
||||||
class ReventRecorder(object):
|
class ReventRecorder(object):
|
||||||
|
|
||||||
|
# Share location of target excutable across all instances
|
||||||
|
target_executable = None
|
||||||
|
|
||||||
def __init__(self, target):
|
def __init__(self, target):
|
||||||
self.target = 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):
|
def deploy(self):
|
||||||
if not self.executable:
|
if not ReventRecorder.target_executable:
|
||||||
host_executable = get_revent_binary(self.target.abi)
|
ReventRecorder.target_executable = self.target.get_installed('revent')
|
||||||
self.executable = self.target.install(host_executable)
|
host_executable = get_revent_binary(self.target.abi)
|
||||||
|
ReventRecorder.target_executable = self.target.install(host_executable)
|
||||||
|
|
||||||
|
@once_per_class
|
||||||
def remove(self):
|
def remove(self):
|
||||||
if self.executable:
|
if ReventRecorder.target_executable:
|
||||||
self.target.uninstall('revent')
|
self.target.uninstall('revent')
|
||||||
|
|
||||||
def start_record(self, revent_file):
|
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)
|
self.target.kick_off(command, self.target.is_rooted)
|
||||||
|
|
||||||
def stop_record(self):
|
def stop_record(self):
|
||||||
@ -292,5 +302,10 @@ class ReventRecorder(object):
|
|||||||
|
|
||||||
def replay(self, revent_file, timeout=None):
|
def replay(self, revent_file, timeout=None):
|
||||||
self.target.killall('revent')
|
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)
|
self.target.execute(command, timeout=timeout)
|
||||||
|
|
||||||
|
@memoized
|
||||||
|
@staticmethod
|
||||||
|
def _get_target_path(target):
|
||||||
|
return target.get_installed('revent')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user