mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-25 22:38:49 +00:00
fw/target/info: Implement TargetInfo structures as Podable
Ensure that the various data structures used to store target information now have a serialization versions.
This commit is contained in:
parent
4ff7e4aab0
commit
92cf132cf2
@ -15,7 +15,6 @@
|
|||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
|
|
||||||
import os
|
import os
|
||||||
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
|
||||||
@ -23,7 +22,7 @@ from devlib.utils.android import AndroidProperties
|
|||||||
|
|
||||||
from wa.framework.configuration.core import settings
|
from wa.framework.configuration.core import settings
|
||||||
from wa.framework.exception import ConfigError
|
from wa.framework.exception import ConfigError
|
||||||
from wa.utils.serializer import read_pod, write_pod
|
from wa.utils.serializer import read_pod, write_pod, Podable
|
||||||
|
|
||||||
|
|
||||||
def cpuinfo_from_pod(pod):
|
def cpuinfo_from_pod(pod):
|
||||||
@ -65,20 +64,32 @@ def kernel_config_from_pod(pod):
|
|||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
class CpufreqInfo(object):
|
class CpufreqInfo(Podable):
|
||||||
|
|
||||||
|
_pod_serialization_version = 1
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_pod(pod):
|
def from_pod(pod):
|
||||||
|
pod = CpufreqInfo._upgrade_pod(pod)
|
||||||
return CpufreqInfo(**pod)
|
return CpufreqInfo(**pod)
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
super(CpufreqInfo, self).__init__()
|
||||||
self.available_frequencies = kwargs.pop('available_frequencies', [])
|
self.available_frequencies = kwargs.pop('available_frequencies', [])
|
||||||
self.available_governors = kwargs.pop('available_governors', [])
|
self.available_governors = kwargs.pop('available_governors', [])
|
||||||
self.related_cpus = kwargs.pop('related_cpus', [])
|
self.related_cpus = kwargs.pop('related_cpus', [])
|
||||||
self.driver = kwargs.pop('driver', None)
|
self.driver = kwargs.pop('driver', None)
|
||||||
|
self._pod_version = kwargs.pop('_pod_version', self._pod_serialization_version)
|
||||||
|
|
||||||
def to_pod(self):
|
def to_pod(self):
|
||||||
return copy(self.__dict__)
|
pod = super(CpufreqInfo, self).to_pod()
|
||||||
|
pod.update(self.__dict__)
|
||||||
|
return pod
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _pod_upgrade_v1(pod):
|
||||||
|
pod['_pod_version'] = pod.get('_pod_version', 1)
|
||||||
|
return pod
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'Cpufreq({} {})'.format(self.driver, self.related_cpus)
|
return 'Cpufreq({} {})'.format(self.driver, self.related_cpus)
|
||||||
@ -86,20 +97,32 @@ class CpufreqInfo(object):
|
|||||||
__str__ = __repr__
|
__str__ = __repr__
|
||||||
|
|
||||||
|
|
||||||
class IdleStateInfo(object):
|
class IdleStateInfo(Podable):
|
||||||
|
|
||||||
|
_pod_serialization_version = 1
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_pod(pod):
|
def from_pod(pod):
|
||||||
|
pod = IdleStateInfo._upgrade_pod(pod)
|
||||||
return IdleStateInfo(**pod)
|
return IdleStateInfo(**pod)
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
super(IdleStateInfo, self).__init__()
|
||||||
self.name = kwargs.pop('name', None)
|
self.name = kwargs.pop('name', None)
|
||||||
self.desc = kwargs.pop('desc', None)
|
self.desc = kwargs.pop('desc', None)
|
||||||
self.power = kwargs.pop('power', None)
|
self.power = kwargs.pop('power', None)
|
||||||
self.latency = kwargs.pop('latency', None)
|
self.latency = kwargs.pop('latency', None)
|
||||||
|
self._pod_version = kwargs.pop('_pod_version', self._pod_serialization_version)
|
||||||
|
|
||||||
def to_pod(self):
|
def to_pod(self):
|
||||||
return copy(self.__dict__)
|
pod = super(IdleStateInfo, self).to_pod()
|
||||||
|
pod.update(self.__dict__)
|
||||||
|
return pod
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _pod_upgrade_v1(pod):
|
||||||
|
pod['_pod_version'] = pod.get('_pod_version', 1)
|
||||||
|
return pod
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'IdleState({}/{})'.format(self.name, self.desc)
|
return 'IdleState({}/{})'.format(self.name, self.desc)
|
||||||
@ -107,11 +130,15 @@ class IdleStateInfo(object):
|
|||||||
__str__ = __repr__
|
__str__ = __repr__
|
||||||
|
|
||||||
|
|
||||||
class CpuidleInfo(object):
|
class CpuidleInfo(Podable):
|
||||||
|
|
||||||
|
_pod_serialization_version = 1
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_pod(pod):
|
def from_pod(pod):
|
||||||
|
pod = CpuidleInfo._upgrade_pod(pod)
|
||||||
instance = CpuidleInfo()
|
instance = CpuidleInfo()
|
||||||
|
instance._pod_version = pod['_pod_version']
|
||||||
instance.governor = pod['governor']
|
instance.governor = pod['governor']
|
||||||
instance.driver = pod['driver']
|
instance.driver = pod['driver']
|
||||||
instance.states = [IdleStateInfo.from_pod(s) for s in pod['states']]
|
instance.states = [IdleStateInfo.from_pod(s) for s in pod['states']]
|
||||||
@ -122,17 +149,23 @@ class CpuidleInfo(object):
|
|||||||
return len(self.states)
|
return len(self.states)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
super(CpuidleInfo, self).__init__()
|
||||||
self.governor = None
|
self.governor = None
|
||||||
self.driver = None
|
self.driver = None
|
||||||
self.states = []
|
self.states = []
|
||||||
|
|
||||||
def to_pod(self):
|
def to_pod(self):
|
||||||
pod = {}
|
pod = super(CpuidleInfo, self).to_pod()
|
||||||
pod['governor'] = self.governor
|
pod['governor'] = self.governor
|
||||||
pod['driver'] = self.driver
|
pod['driver'] = self.driver
|
||||||
pod['states'] = [s.to_pod() for s in self.states]
|
pod['states'] = [s.to_pod() for s in self.states]
|
||||||
return pod
|
return pod
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _pod_upgrade_v1(pod):
|
||||||
|
pod['_pod_version'] = pod.get('_pod_version', 1)
|
||||||
|
return pod
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'Cpuidle({}/{} {} states)'.format(
|
return 'Cpuidle({}/{} {} states)'.format(
|
||||||
self.governor, self.driver, self.num_states)
|
self.governor, self.driver, self.num_states)
|
||||||
@ -140,11 +173,13 @@ class CpuidleInfo(object):
|
|||||||
__str__ = __repr__
|
__str__ = __repr__
|
||||||
|
|
||||||
|
|
||||||
class CpuInfo(object):
|
class CpuInfo(Podable):
|
||||||
|
|
||||||
|
_pod_serialization_version = 1
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_pod(pod):
|
def from_pod(pod):
|
||||||
instance = CpuInfo()
|
instance = super(CpuInfo, CpuInfo).from_pod(pod)
|
||||||
instance.id = pod['id']
|
instance.id = pod['id']
|
||||||
instance.name = pod['name']
|
instance.name = pod['name']
|
||||||
instance.architecture = pod['architecture']
|
instance.architecture = pod['architecture']
|
||||||
@ -154,6 +189,7 @@ class CpuInfo(object):
|
|||||||
return instance
|
return instance
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
super(CpuInfo, self).__init__()
|
||||||
self.id = None
|
self.id = None
|
||||||
self.name = None
|
self.name = None
|
||||||
self.architecture = None
|
self.architecture = None
|
||||||
@ -162,7 +198,7 @@ class CpuInfo(object):
|
|||||||
self.cpuidle = CpuidleInfo()
|
self.cpuidle = CpuidleInfo()
|
||||||
|
|
||||||
def to_pod(self):
|
def to_pod(self):
|
||||||
pod = {}
|
pod = super(CpuInfo, self).to_pod()
|
||||||
pod['id'] = self.id
|
pod['id'] = self.id
|
||||||
pod['name'] = self.name
|
pod['name'] = self.name
|
||||||
pod['architecture'] = self.architecture
|
pod['architecture'] = self.architecture
|
||||||
@ -171,6 +207,11 @@ class CpuInfo(object):
|
|||||||
pod['cpuidle'] = self.cpuidle.to_pod()
|
pod['cpuidle'] = self.cpuidle.to_pod()
|
||||||
return pod
|
return pod
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _pod_upgrade_v1(pod):
|
||||||
|
pod['_pod_version'] = pod.get('_pod_version', 1)
|
||||||
|
return pod
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'Cpu({} {})'.format(self.id, self.name)
|
return 'Cpu({} {})'.format(self.id, self.name)
|
||||||
|
|
||||||
@ -254,10 +295,10 @@ def get_target_info_from_cache(system_id):
|
|||||||
if not pod:
|
if not pod:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
pod_version = pod.get('format_version', 0)
|
_pod_version = pod.get('_pod_version', 0)
|
||||||
if pod_version != TargetInfo.format_version:
|
if _pod_version != TargetInfo._pod_serialization_version:
|
||||||
msg = 'Target info version mismatch. Expected {}, but found {}.\nTry deleting {}'
|
msg = 'Target info version mismatch. Expected {}, but found {}.\nTry deleting {}'
|
||||||
raise ConfigError(msg.format(TargetInfo.format_version, pod_version,
|
raise ConfigError(msg.format(TargetInfo._pod_serialization_version, _pod_version,
|
||||||
settings.target_info_cache_file))
|
settings.target_info_cache_file))
|
||||||
return TargetInfo.from_pod(pod)
|
return TargetInfo.from_pod(pod)
|
||||||
|
|
||||||
@ -270,13 +311,13 @@ def cache_target_info(target_info, overwrite=False):
|
|||||||
write_target_info_cache(cache)
|
write_target_info_cache(cache)
|
||||||
|
|
||||||
|
|
||||||
class TargetInfo(object):
|
class TargetInfo(Podable):
|
||||||
|
|
||||||
format_version = 2
|
_pod_serialization_version = 2
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_pod(pod):
|
def from_pod(pod):
|
||||||
instance = TargetInfo()
|
instance = super(TargetInfo, TargetInfo).from_pod(pod)
|
||||||
instance.target = pod['target']
|
instance.target = pod['target']
|
||||||
instance.abi = pod['abi']
|
instance.abi = pod['abi']
|
||||||
instance.cpus = [CpuInfo.from_pod(c) for c in pod['cpus']]
|
instance.cpus = [CpuInfo.from_pod(c) for c in pod['cpus']]
|
||||||
@ -300,6 +341,7 @@ class TargetInfo(object):
|
|||||||
return instance
|
return instance
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
super(TargetInfo, self).__init__()
|
||||||
self.target = None
|
self.target = None
|
||||||
self.cpus = []
|
self.cpus = []
|
||||||
self.os = None
|
self.os = None
|
||||||
@ -318,8 +360,7 @@ class TargetInfo(object):
|
|||||||
self.page_size_kb = None
|
self.page_size_kb = None
|
||||||
|
|
||||||
def to_pod(self):
|
def to_pod(self):
|
||||||
pod = {}
|
pod = super(TargetInfo, self).to_pod()
|
||||||
pod['format_version'] = self.format_version
|
|
||||||
pod['target'] = self.target
|
pod['target'] = self.target
|
||||||
pod['abi'] = self.abi
|
pod['abi'] = self.abi
|
||||||
pod['cpus'] = [c.to_pod() for c in self.cpus]
|
pod['cpus'] = [c.to_pod() for c in self.cpus]
|
||||||
@ -341,3 +382,22 @@ class TargetInfo(object):
|
|||||||
pod['android_id'] = self.android_id
|
pod['android_id'] = self.android_id
|
||||||
|
|
||||||
return pod
|
return pod
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _pod_upgrade_v1(pod):
|
||||||
|
pod['_pod_version'] = pod.get('_pod_version', 1)
|
||||||
|
pod['cpus'] = pod.get('cpus', [])
|
||||||
|
pod['system_id'] = pod.get('system_id')
|
||||||
|
pod['hostid'] = pod.get('hostid')
|
||||||
|
pod['hostname'] = pod.get('hostname')
|
||||||
|
pod['sched_features'] = pod.get('sched_features')
|
||||||
|
pod['screen_resolution'] = pod.get('screen_resolution', (0, 0))
|
||||||
|
pod['prop'] = pod.get('prop')
|
||||||
|
pod['android_id'] = pod.get('android_id')
|
||||||
|
return pod
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _pod_upgrade_v2(pod):
|
||||||
|
pod['page_size_kb'] = pod.get('page_size_kb')
|
||||||
|
pod['_pod_version'] = pod.get('format_version', 0)
|
||||||
|
return pod
|
||||||
|
Loading…
x
Reference in New Issue
Block a user