summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 {
250 </td> 250 </td>
251 </tr> 251 </tr>
252 </table> 252 </table>
253
254 {# Recipe version differences #}
255 {% if measurement.buildstats.ver_diff %}
256 <div style="margin-top: 16px">Recipe version changes</div>
257 <table class="details">
258 {% for head, recipes in measurement.buildstats.ver_diff.items() %}
259 <tr>
260 <th colspan="2">{{ head }}</th>
261 </tr>
262 {% for name, info in recipes|sort %}
263 <tr>
264 <td>{{ name }}</td>
265 <td>{{ info }}</td>
266 </tr>
267 {% endfor %}
268 {% endfor %}
269 </table>
270 {% else %}
271 <div style="margin-top: 16px">No recipe version changes detected</div>
272 {% endif %}
253 {% endif %} 273 {% endif %}
254 </div> 274 </div>
255 {% endfor %} 275 {% 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):
157 self.version = version 157 self.version = version
158 self.revision = revision 158 self.revision = revision
159 if epoch is None: 159 if epoch is None:
160 self.nevr = "{}-{}-{}".format(name, version, revision) 160 self.evr = "{}-{}".format(version, revision)
161 else: 161 else:
162 self.nevr = "{}-{}_{}-{}".format(name, epoch, version, revision) 162 self.evr = "{}_{}-{}".format(epoch, version, revision)
163 self.tasks = {} 163 self.tasks = {}
164 164
165 def aggregate(self, bsrecipe): 165 def aggregate(self, bsrecipe):
@@ -176,6 +176,10 @@ class BSRecipe(object):
176 self.tasks[taskname] = BSTaskAggregate([self.tasks[taskname]]) 176 self.tasks[taskname] = BSTaskAggregate([self.tasks[taskname]])
177 self.tasks[taskname].append(taskdata) 177 self.tasks[taskname].append(taskdata)
178 178
179 @property
180 def nevr(self):
181 return self.name + '-' + self.evr
182
179 183
180class BuildStats(dict): 184class BuildStats(dict):
181 """Class representing buildstats of one build""" 185 """Class representing buildstats of one build"""
@@ -323,6 +327,7 @@ class BSVerDiff(object):
323 self.vchanged = {} 327 self.vchanged = {}
324 self.rchanged = {} 328 self.rchanged = {}
325 self.unchanged = {} 329 self.unchanged = {}
330 self.empty_diff = False
326 331
327 common = recipes2.intersection(recipes1) 332 common = recipes2.intersection(recipes1)
328 if common: 333 if common:
@@ -336,3 +341,9 @@ class BSVerDiff(object):
336 self.rchanged[recipe] = rdiff 341 self.rchanged[recipe] = rdiff
337 else: 342 else:
338 self.unchanged[recipe] = rdiff 343 self.unchanged[recipe] = rdiff
344
345 if len(recipes1) == len(recipes2) == len(self.unchanged):
346 self.empty_diff = True
347
348 def __bool__(self):
349 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,
32 aggregate_data, aggregate_metadata, measurement_stats, 32 aggregate_data, aggregate_metadata, measurement_stats,
33 AggregateTestData) 33 AggregateTestData)
34from build_perf import html 34from build_perf import html
35from buildstats import BuildStats, diff_buildstats 35from buildstats import BuildStats, diff_buildstats, BSVerDiff
36 36
37scriptpath.add_oe_lib_path() 37scriptpath.add_oe_lib_path()
38 38
@@ -341,6 +341,7 @@ class BSSummary(object):
341 self.top_consumer = None 341 self.top_consumer = None
342 self.top_decrease = None 342 self.top_decrease = None
343 self.top_increase = None 343 self.top_increase = None
344 self.ver_diff = OrderedDict()
344 345
345 tasks_diff = diff_buildstats(bs1, bs2, 'cputime') 346 tasks_diff = diff_buildstats(bs1, bs2, 'cputime')
346 347
@@ -353,6 +354,20 @@ class BSSummary(object):
353 self.top_decrease = tasks_diff[0:5] 354 self.top_decrease = tasks_diff[0:5]
354 self.top_increase = tasks_diff[-5:] 355 self.top_increase = tasks_diff[-5:]
355 356
357 # Compare recipe versions and prepare data for display
358 ver_diff = BSVerDiff(bs1, bs2)
359 if ver_diff:
360 if ver_diff.new:
361 self.ver_diff['New recipes'] = [(n, r.evr) for n, r in ver_diff.new.items()]
362 if ver_diff.dropped:
363 self.ver_diff['Dropped recipes'] = [(n, r.evr) for n, r in ver_diff.dropped.items()]
364 if ver_diff.echanged:
365 self.ver_diff['Epoch changed'] = [(n, "{} &rarr; {}".format(r.left.evr, r.right.evr)) for n, r in ver_diff.echanged.items()]
366 if ver_diff.vchanged:
367 self.ver_diff['Version changed'] = [(n, "{} &rarr; {}".format(r.left.version, r.right.version)) for n, r in ver_diff.vchanged.items()]
368 if ver_diff.rchanged:
369 self.ver_diff['Revision changed'] = [(n, "{} &rarr; {}".format(r.left.evr, r.right.evr)) for n, r in ver_diff.rchanged.items()]
370
356 371
357def print_html_report(data, id_comp, buildstats): 372def print_html_report(data, id_comp, buildstats):
358 """Print report in html format""" 373 """Print report in html format"""