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

fw: cache target info

Cache target info after pulling it from the device. Attempt to retrieve
from cache before querying target.
This commit is contained in:
Sergei Trofimov 2018-07-13 15:28:23 +01:00 committed by Marc Bonnici
parent 770d2b2f0e
commit e8f545861d
3 changed files with 44 additions and 2 deletions

View File

@ -498,6 +498,10 @@ class MetaConfiguration(Configuration):
def additional_packages_file(self): def additional_packages_file(self):
return os.path.join(self.user_directory, 'packages') return os.path.join(self.user_directory, 'packages')
@property
def target_info_cache_file(self):
return os.path.join(self.cache_directory, 'targets.json')
def __init__(self, environ=None): def __init__(self, environ=None):
super(MetaConfiguration, self).__init__() super(MetaConfiguration, self).__init__()
if environ is None: if environ is None:

View File

@ -14,12 +14,16 @@
# #
# pylint: disable=protected-access # pylint: disable=protected-access
import os
from copy import copy from copy import copy
from devlib import AndroidTarget, TargetError from devlib import AndroidTarget, TargetError
from devlib.target import KernelConfig, KernelVersion, Cpuinfo from devlib.target import KernelConfig, KernelVersion, Cpuinfo
from devlib.utils.android import AndroidProperties from devlib.utils.android import AndroidProperties
from wa.framework.configuration.core import settings
from wa.utils.serializer import read_pod, write_pod
def cpuinfo_from_pod(pod): def cpuinfo_from_pod(pod):
cpuinfo = Cpuinfo('') cpuinfo = Cpuinfo('')
@ -226,6 +230,36 @@ def get_target_info(target):
return info return info
def read_target_info_cache():
if not os.path.exists(settings.cache_directory):
os.makedirs(settings.cache_directory)
if not os.path.isfile(settings.target_info_cache_file):
return {}
return read_pod(settings.target_info_cache_file)
def write_target_info_cache(cache):
if not os.path.exists(settings.cache_directory):
os.makedirs(settings.cache_directory)
write_pod(cache, settings.target_info_cache_file)
def get_target_info_from_cache(system_id):
cache = read_target_info_cache()
pod = cache.get(system_id, None)
if not pod:
return None
return TargetInfo.from_pod(pod)
def cache_target_info(target_info, overwrite=False):
cache = read_target_info_cache()
if target_info.system_id in cache and not overwrite:
raise ValueError('TargetInfo for {} is already in cache.'.format(target_info.system_id))
cache[target_info.system_id] = target_info.to_pod()
write_target_info_cache(cache)
class TargetInfo(object): class TargetInfo(object):
@staticmethod @staticmethod

View File

@ -24,7 +24,7 @@ from wa.framework.plugin import Parameter
from wa.framework.target.descriptor import (get_target_description, from wa.framework.target.descriptor import (get_target_description,
instantiate_target, instantiate_target,
instantiate_assistant) instantiate_assistant)
from wa.framework.target.info import get_target_info from wa.framework.target.info import get_target_info, get_target_info_from_cache, cache_target_info
from wa.framework.target.runtime_parameter_manager import RuntimeParameterManager from wa.framework.target.runtime_parameter_manager import RuntimeParameterManager
@ -89,7 +89,11 @@ class TargetManager(object):
@memoized @memoized
def get_target_info(self): def get_target_info(self):
return get_target_info(self.target) info = get_target_info_from_cache(self.target.system_id)
if info is None:
info = get_target_info(self.target)
cache_target_info(info)
return info
def reboot(self, context, hard=False): def reboot(self, context, hard=False):
with signal.wrap('REBOOT', self, context): with signal.wrap('REBOOT', self, context):