summaryrefslogtreecommitdiffstats
path: root/qtip/loader
diff options
context:
space:
mode:
authorYujun Zhang <zhang.yujunz@zte.com.cn>2016-12-30 14:08:15 +0800
committerYujun Zhang <zhang.yujunz@zte.com.cn>2017-01-03 18:16:12 +0800
commitd8c05b528b5a75377848d130286bc997da06a792 (patch)
treed88f44e3a0d87ffdf64ba20ecf0417e01f63427f /qtip/loader
parentdecad5f7fdb212c4f78fc31f00e591eaba104450 (diff)
Implement plan, qpi and metric constructors
- separate runner from `plan` and move `plan` to `loader` - rename `algorithm` to `formula` - use `numpy` for formulas - update sample qpi and metrics Change-Id: I3131ca79907376f2de31d6cb920bd7d0230664a6 Signed-off-by: Yujun Zhang <zhang.yujunz@zte.com.cn>
Diffstat (limited to 'qtip/loader')
-rw-r--r--qtip/loader/base.py11
-rw-r--r--qtip/loader/metric.py2
-rw-r--r--qtip/loader/plan.py27
-rw-r--r--qtip/loader/qpi.py22
4 files changed, 54 insertions, 8 deletions
diff --git a/qtip/loader/base.py b/qtip/loader/base.py
index f7fcb669..2f5ab67a 100644
--- a/qtip/loader/base.py
+++ b/qtip/loader/base.py
@@ -20,13 +20,13 @@ ROOT_DIR = 'benchmarks'
class BaseLoader(object):
"""Abstract class of QTIP benchmark loader"""
- DEFAULT_DIR = '.'
+ RELATIVE_PATH = '.'
_paths = [path.join(path.dirname(__file__), path.pardir, path.pardir,
ROOT_DIR)]
def __init__(self, name, paths=None):
self._file = name
- self._abspath = self._find(name, paths)
+ self._abspath = self._find(name, paths=paths)
try:
content = yaml.safe_load(file(self._abspath))
@@ -38,12 +38,11 @@ class BaseLoader(object):
else path.splitext(name)[0]
self.content = content
- def _find(self, name, paths):
+ def _find(self, name, paths=None):
"""find a benchmark in searching paths"""
paths = self._paths if paths is None else paths
- name = path.join(self.DEFAULT_DIR, name)
for p in paths:
- abspath = path.join(p, name)
+ abspath = path.join(p, self.RELATIVE_PATH, name)
if path.exists(abspath):
return abspath
raise NotFound(name, paths)
@@ -52,7 +51,7 @@ class BaseLoader(object):
def list_all(cls, paths=None):
"""list all available benchmarks"""
paths = cls._paths if paths is None else paths
- names = chain.from_iterable([listdir(path.join(p, cls.DEFAULT_DIR))
+ names = chain.from_iterable([listdir(path.join(p, cls.RELATIVE_PATH))
for p in paths])
for name in names:
item = cls(name, paths=paths)
diff --git a/qtip/loader/metric.py b/qtip/loader/metric.py
index d6174e8f..8b6fa5d3 100644
--- a/qtip/loader/metric.py
+++ b/qtip/loader/metric.py
@@ -13,4 +13,4 @@ from base import BaseLoader
class MetricSpec(BaseLoader):
"""metrics in QTIP are categorized by performance test tools, such as
dhrystone, whetstone and etc"""
- DEFAULT_DIR = 'metric'
+ RELATIVE_PATH = 'metric'
diff --git a/qtip/loader/plan.py b/qtip/loader/plan.py
new file mode 100644
index 00000000..cf517ea2
--- /dev/null
+++ b/qtip/loader/plan.py
@@ -0,0 +1,27 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corp and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+from qtip.base.constant import PropName
+from qtip.loader.base import BaseLoader
+from qtip.loader.qpi import QPISpec
+
+
+class Plan(BaseLoader):
+ """
+ a benchmark plan is consist of configuration and a QPI list
+ """
+
+ RELATIVE_PATH = 'plan'
+
+ def __init__(self, name, paths=None):
+ super(Plan, self).__init__(name, paths)
+
+ self.qpis = [QPISpec(qpi, paths=paths)
+ for qpi in self.content[PropName.QPIS]]
diff --git a/qtip/loader/qpi.py b/qtip/loader/qpi.py
index 2972cbd7..cfa918c5 100644
--- a/qtip/loader/qpi.py
+++ b/qtip/loader/qpi.py
@@ -8,6 +8,10 @@
##############################################################################
from base import BaseLoader
+from metric import MetricSpec
+
+from qtip.base.constant import PropName
+from qtip.utils.formula import Formula
class QPISpec(BaseLoader):
@@ -15,4 +19,20 @@ class QPISpec(BaseLoader):
a QPI specification defines how to calculate a performance index from
collected metrics.
"""
- DEFAULT_DIR = 'QPI'
+ RELATIVE_PATH = 'QPI'
+
+ def __init__(self, name, paths=None):
+ super(QPISpec, self).__init__(name, paths=paths)
+ content = self.content
+ self.formula = Formula(content[PropName.FORMULA])
+ self.sections = [Section(record, paths=paths)
+ for record in content[PropName.SECTIONS]]
+
+
+class Section(object):
+ def __init__(self, content, paths=None):
+ self.name = content[PropName.NAME]
+ self.weight = content[PropName.WEIGHT]
+ self.formula = Formula(content[PropName.FORMULA])
+ self.metrics = [MetricSpec(record, paths=paths)
+ for record in content[PropName.METRICS]]