summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2017-09-15 16:04:40 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-18 11:07:24 +0100
commit46eb839b51bb1466a9feeb09c9c437d6d45576cc (patch)
treedc4103de212b3dc1ede5223218213aa6428b6d06 /scripts
parent2f8942d6830258fcbe1925f12ba1516def32d132 (diff)
downloadopenembedded-core-46eb839b51bb1466a9feeb09c9c437d6d45576cc.tar.gz
scripts/oe-build-perf-report: show recipe version changes in html report
If buildstats are available (for a certain measurement), show recipe version changes between the two builds that are being compared. The information shown includes new and dropped recipes as well as changes in recipe version, revision or epoch. [YOCTO #11382] Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/lib/build_perf/html/report.html20
-rw-r--r--scripts/lib/buildstats.py15
-rwxr-xr-xscripts/oe-build-perf-report17
3 files changed, 49 insertions, 3 deletions
diff --git a/scripts/lib/build_perf/html/report.html b/scripts/lib/build_perf/html/report.html
index e56186c958..291ad9d721 100644
--- a/scripts/lib/build_perf/html/report.html
+++ b/scripts/lib/build_perf/html/report.html
@@ -250,6 +250,26 @@ h3 {
</td>
</tr>
</table>
+
+ {# Recipe version differences #}
+ {% if measurement.buildstats.ver_diff %}
+ <div style="margin-top: 16px">Recipe version changes</div>
+ <table class="details">
+ {% for head, recipes in measurement.buildstats.ver_diff.items() %}
+ <tr>
+ <th colspan="2">{{ head }}</th>
+ </tr>
+ {% for name, info in recipes|sort %}
+ <tr>
+ <td>{{ name }}</td>
+ <td>{{ info }}</td>
+ </tr>
+ {% endfor %}
+ {% endfor %}
+ </table>
+ {% else %}
+ <div style="margin-top: 16px">No recipe version changes detected</div>
+ {% endif %}
{% endif %}
</div>
{% endfor %}
diff --git a/scripts/lib/buildstats.py b/scripts/lib/buildstats.py
index b1c9e617c6..d9aadf3cb8 100644
--- a/scripts/lib/buildstats.py
+++ b/scripts/lib/buildstats.py
@@ -157,9 +157,9 @@ class BSRecipe(object):
self.version = version
self.revision = revision
if epoch is None:
- self.nevr = "{}-{}-{}".format(name, version, revision)
+ self.evr = "{}-{}".format(version, revision)
else:
- self.nevr = "{}-{}_{}-{}".format(name, epoch, version, revision)
+ self.evr = "{}_{}-{}".format(epoch, version, revision)
self.tasks = {}
def aggregate(self, bsrecipe):
@@ -176,6 +176,10 @@ class BSRecipe(object):
self.tasks[taskname] = BSTaskAggregate([self.tasks[taskname]])
self.tasks[taskname].append(taskdata)
+ @property
+ def nevr(self):
+ return self.name + '-' + self.evr
+
class BuildStats(dict):
"""Class representing buildstats of one build"""
@@ -323,6 +327,7 @@ class BSVerDiff(object):
self.vchanged = {}
self.rchanged = {}
self.unchanged = {}
+ self.empty_diff = False
common = recipes2.intersection(recipes1)
if common:
@@ -336,3 +341,9 @@ class BSVerDiff(object):
self.rchanged[recipe] = rdiff
else:
self.unchanged[recipe] = rdiff
+
+ if len(recipes1) == len(recipes2) == len(self.unchanged):
+ self.empty_diff = True
+
+ def __bool__(self):
+ return not self.empty_diff
diff --git a/scripts/oe-build-perf-report b/scripts/oe-build-perf-report
index 0b2f730e57..ac88f0fce5 100755
--- a/scripts/oe-build-perf-report
+++ b/scripts/oe-build-perf-report
@@ -32,7 +32,7 @@ from build_perf.report import (metadata_xml_to_json, results_xml_to_json,
aggregate_data, aggregate_metadata, measurement_stats,
AggregateTestData)
from build_perf import html
-from buildstats import BuildStats, diff_buildstats
+from buildstats import BuildStats, diff_buildstats, BSVerDiff
scriptpath.add_oe_lib_path()
@@ -341,6 +341,7 @@ class BSSummary(object):
self.top_consumer = None
self.top_decrease = None
self.top_increase = None
+ self.ver_diff = OrderedDict()
tasks_diff = diff_buildstats(bs1, bs2, 'cputime')
@@ -353,6 +354,20 @@ class BSSummary(object):
self.top_decrease = tasks_diff[0:5]
self.top_increase = tasks_diff[-5:]
+ # Compare recipe versions and prepare data for display
+ ver_diff = BSVerDiff(bs1, bs2)
+ if ver_diff:
+ if ver_diff.new:
+ self.ver_diff['New recipes'] = [(n, r.evr) for n, r in ver_diff.new.items()]
+ if ver_diff.dropped:
+ self.ver_diff['Dropped recipes'] = [(n, r.evr) for n, r in ver_diff.dropped.items()]
+ if ver_diff.echanged:
+ self.ver_diff['Epoch changed'] = [(n, "{} &rarr; {}".format(r.left.evr, r.right.evr)) for n, r in ver_diff.echanged.items()]
+ if ver_diff.vchanged:
+ self.ver_diff['Version changed'] = [(n, "{} &rarr; {}".format(r.left.version, r.right.version)) for n, r in ver_diff.vchanged.items()]
+ if ver_diff.rchanged:
+ self.ver_diff['Revision changed'] = [(n, "{} &rarr; {}".format(r.left.evr, r.right.evr)) for n, r in ver_diff.rchanged.items()]
+
def print_html_report(data, id_comp, buildstats):
"""Print report in html format"""