mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
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] (From OE-Core rev: 46eb839b51bb1466a9feeb09c9c437d6d45576cc) Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
a80f5e761c
commit
6c222a5c11
|
@ -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 %}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, "{} → {}".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, "{} → {}".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, "{} → {}".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"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user