diff options
| -rw-r--r-- | scripts/lib/build_perf/html/report.html | 20 | ||||
| -rw-r--r-- | scripts/lib/buildstats.py | 15 | ||||
| -rwxr-xr-x | scripts/oe-build-perf-report | 17 |
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 | ||
| 180 | class BuildStats(dict): | 184 | class 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) |
| 34 | from build_perf import html | 34 | from build_perf import html |
| 35 | from buildstats import BuildStats, diff_buildstats | 35 | from buildstats import BuildStats, diff_buildstats, BSVerDiff |
| 36 | 36 | ||
| 37 | scriptpath.add_oe_lib_path() | 37 | scriptpath.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, "{} → {}".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, "{} → {}".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, "{} → {}".format(r.left.evr, r.right.evr)) for n, r in ver_diff.rchanged.items()] | ||
| 370 | |||
| 356 | 371 | ||
| 357 | def print_html_report(data, id_comp, buildstats): | 372 | def print_html_report(data, id_comp, buildstats): |
| 358 | """Print report in html format""" | 373 | """Print report in html format""" |
