From 68d958ce197f10e35910187011733650d4fcf8fe Mon Sep 17 00:00:00 2001 From: mattip Date: Sun, 31 May 2026 21:05:35 +0300 Subject: [PATCH 1/3] add unused source for benchmarks no longer used --- .../migrations/0006_benchmark_source_unused.py | 18 ++++++++++++++++++ codespeed/models.py | 1 + 2 files changed, 19 insertions(+) create mode 100644 codespeed/migrations/0006_benchmark_source_unused.py diff --git a/codespeed/migrations/0006_benchmark_source_unused.py b/codespeed/migrations/0006_benchmark_source_unused.py new file mode 100644 index 00000000..bd23cb36 --- /dev/null +++ b/codespeed/migrations/0006_benchmark_source_unused.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.13 on 2026-05-31 17:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('codespeed', '0005_benchmark_source_result_suite_version'), + ] + + operations = [ + migrations.AlterField( + model_name='benchmark', + name='source', + field=models.CharField(choices=[('legacy', 'Legacy'), ('pyperformance', 'PyPerformance'), ('unused', 'Unused')], default='legacy', max_length=14), + ), + ] diff --git a/codespeed/models.py b/codespeed/models.py index 1bc24803..f85f0856 100644 --- a/codespeed/models.py +++ b/codespeed/models.py @@ -175,6 +175,7 @@ class Benchmark(models.Model): S_TYPES = ( ('legacy', 'Legacy'), ('pyperformance', 'PyPerformance'), + ('unused', 'Unused'), ) D_TYPES = ( ('U', 'Mean'), From 52ef2e2e524d788ffeae8ef16fd3e5fe7eac6466 Mon Sep 17 00:00:00 2001 From: mattip Date: Sun, 31 May 2026 23:06:15 +0300 Subject: [PATCH 2/3] merge benchmark ids from differend sources don't override --- codespeed/views.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/codespeed/views.py b/codespeed/views.py index 05aabb47..c25306bc 100644 --- a/codespeed/views.py +++ b/codespeed/views.py @@ -366,12 +366,14 @@ def comparison(request): benchmarks[source_label] = qs for unit in qs.values_list('units_title', flat=True).distinct(): unit_qs = qs.filter(units_title=unit) - units = unit_qs[0].units - lessisbetter = (unit_qs[0].lessisbetter and - ' (less is better)' or ' (more is better)') - bench_units[unit] = [ - [b.id for b in unit_qs], lessisbetter, units - ] + ids = [b.id for b in unit_qs] + if unit in bench_units: + bench_units[unit][0].extend(ids) + else: + units = unit_qs[0].units + lessisbetter = (unit_qs[0].lessisbetter and + ' (less is better)' or ' (more is better)') + bench_units[unit] = [ids, lessisbetter, units] checkedbenchmarks = [] if 'ben' in data: checkedbenchmarks = _parse_ben_param(data['ben']) From e364153d201258bf9404dc624e18e84ba2646432 Mon Sep 17 00:00:00 2001 From: mattip Date: Sun, 31 May 2026 23:49:49 +0300 Subject: [PATCH 3/3] filter name displayed for executables to reduce visible nonoise --- codespeed/tests/test_views_data.py | 16 ++++++++-------- codespeed/views_data.py | 27 +++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/codespeed/tests/test_views_data.py b/codespeed/tests/test_views_data.py index 8d320d87..02c78085 100644 --- a/codespeed/tests/test_views_data.py +++ b/codespeed/tests/test_views_data.py @@ -86,24 +86,24 @@ def test_get_comparisonexes_master_default_branch(self): self.assertEqual(executables[self.project][0]['key'], '1:L:master') self.assertEqual(executables[self.project][0]['name'], - 'TestExecutable1 latest') + 'Executable1 latest') self.assertEqual(executables[self.project][0]['revision'], self.revision_1_master) self.assertEqual(executables[self.project][1]['key'], '2:L:master') self.assertEqual(executables[self.project][1]['name'], - 'TestExecutable2 latest') + 'Executable2 latest') self.assertEqual(executables[self.project][2]['key'], '1:L:custom') self.assertEqual(executables[self.project][2]['name'], - 'TestExecutable1 latest in branch \'custom\'') + 'Executable1 latest in branch \'custom\'') self.assertEqual(executables[self.project][3]['key'], '2:L:custom') self.assertEqual(executables[self.project][3]['name'], - 'TestExecutable2 latest in branch \'custom\'') + 'Executable2 latest in branch \'custom\'') self.assertEqual(exe_keys[0], '1:L:master') self.assertEqual(exe_keys[1], '2:L:master') @@ -125,24 +125,24 @@ def test_get_comparisonexes_custom_default_branch(self): self.assertEqual(executables[self.project][0]['key'], '1:L:master') self.assertEqual(executables[self.project][0]['name'], - 'TestExecutable1 latest in branch \'master\'') + 'Executable1 latest in branch \'master\'') self.assertEqual(executables[self.project][0]['revision'], self.revision_1_master) self.assertEqual(executables[self.project][1]['key'], '2:L:master') self.assertEqual(executables[self.project][1]['name'], - 'TestExecutable2 latest in branch \'master\'') + 'Executable2 latest in branch \'master\'') self.assertEqual(executables[self.project][2]['key'], '1:L:custom') self.assertEqual(executables[self.project][2]['name'], - 'TestExecutable1 latest') + 'Executable1 latest') self.assertEqual(executables[self.project][3]['key'], '2:L:custom') self.assertEqual(executables[self.project][3]['name'], - 'TestExecutable2 latest') + 'Executable2 latest') self.assertEqual(exe_keys[0], '1:L:master') self.assertEqual(exe_keys[1], '2:L:master') diff --git a/codespeed/views_data.py b/codespeed/views_data.py index 29deed9b..948dc6bc 100644 --- a/codespeed/views_data.py +++ b/codespeed/views_data.py @@ -130,11 +130,31 @@ def getcomparisonexes(): for proj in Project.objects.all(): executables = [] executablekeys = [] + proj_name_lower = str(proj).lower() + proj_name_len = len(proj_name_lower) + + def short_exestring(exe): + s = get_sanitized_executable_name_for_comparison_view(exe) + if s.endswith('-64'): + s = s[:-3] + return s + + def strip_proj_prefix(name): + if name.lower().startswith(proj_name_lower): + rest = name[proj_name_len:] + if rest and rest[0] in (' ', '-'): + rest = rest[1:] + if rest: + return rest + return name + # add all tagged revs for any project for exe in baselines: if exe['key'] != "none" and exe['executable'].project == proj: + name = strip_proj_prefix( + short_exestring(exe['executable']) + " " + exe['revision'].tag) executablekeys.append(exe['key']) - executables.append(exe) + executables.append(dict(exe, name=name)) # add latest revs of the project branches = Branch.objects.filter(project=proj, display_on_comparison_page=True) @@ -147,8 +167,7 @@ def getcomparisonexes(): # because we already added tagged revisions if rev.tag == "": for exe in Executable.objects.filter(project=proj): - exestring = get_sanitized_executable_name_for_comparison_view(exe) - name = exestring + " latest" + name = short_exestring(exe) + " latest" if branch.name != proj.default_branch: name += " in branch '" + branch.name + "'" key = str(exe.id) + ":L:" + branch.name @@ -157,7 +176,7 @@ def getcomparisonexes(): 'key': key, 'executable': exe, 'revision': rev, - 'name': name, + 'name': strip_proj_prefix(name), }) all_executables[proj] = executables exekeys += executablekeys