Skip to content

Commit af1854d

Browse files
committed
also allow multiple baselines
1 parent dec272f commit af1854d

4 files changed

Lines changed: 47 additions & 27 deletions

File tree

codespeed/views.py

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ def get_context_data(self, **kwargs):
6969
context = super(HomeView, self).get_context_data(**kwargs)
7070
context['show_reports'] = settings.SHOW_REPORTS
7171
context['show_historical'] = settings.SHOW_HISTORICAL
72-
historical_settings = ['SHOW_HISTORICAL', 'DEF_BASELINE', 'DEF_EXECUTABLES']
72+
historical_settings = ['SHOW_HISTORICAL', 'DEF_BASELINES', 'DEF_EXECUTABLES']
7373
if not all(getattr(settings, var) for var in historical_settings):
7474
context['show_historical'] = False
7575
return context
7676

7777
try:
7878
baseline_exe = Executable.objects.get(
79-
name=settings.DEF_BASELINE['executable'])
79+
name=settings.DEF_BASELINES[0]['executable'])
8080
context['baseline'] = baseline_exe
8181
def_name = settings.DEF_EXECUTABLES[0]['name']
8282
def_project = Project.objects.get(name=settings.DEF_EXECUTABLES[0]['project'])
@@ -101,22 +101,23 @@ def gethistoricaldata(request):
101101
env = env.first()
102102

103103
# Fetch Baseline data, filter by executable
104-
baseline_exe = Executable.objects.get(
105-
name=settings.DEF_BASELINE['executable'])
106-
tag=settings.DEF_BASELINE['revision']
107-
rev = Revision.objects.filter(branch__project=baseline_exe.project, tag=tag)
108-
if len(rev) < 1:
109-
return HttpResponse(json.dumps(
110-
f"Could not find {tag=} for {settings.DEF_BASELINE['executable']} in database")
111-
)
112-
rev0 = rev[0]
113-
baseline_results = Result.objects.filter(
114-
executable=baseline_exe, revision=rev0, environment=env)
115-
if not baseline_results:
116-
logger.error('Could not find results for {} rev="{}" env="{}"'.format(
117-
baseline_exe, rev0, env))
118-
data['baseline'] = '{} {}'.format(
119-
settings.DEF_BASELINE['executable'], rev0.tag)
104+
baseline_results = []
105+
for b in settings.DEF_BASELINES:
106+
baseline_exe = Executable.objects.get(
107+
name=b['executable'])
108+
tag=b['revision']
109+
rev = Revision.objects.filter(branch__project=baseline_exe.project, tag=tag)
110+
if len(rev) < 1:
111+
return HttpResponse(json.dumps(
112+
f"Could not find {tag=} for {b['executable']} in database")
113+
)
114+
rev0 = rev[0]
115+
resname = '{} {}'.format(b['executable'], rev0.tag)
116+
baseline_results.append((resname, Result.objects.filter(
117+
executable=baseline_exe, revision=rev0, environment=env)))
118+
if not baseline_results[-1][1]:
119+
logger.error('Could not find results for {} rev="{}" env="{}"'.format(
120+
baseline_exe, rev0, env))
120121

121122
default_results = {}
122123
all_taggedrevs = []
@@ -163,17 +164,30 @@ def gethistoricaldata(request):
163164

164165
# Collect data
165166
benchmarks = []
166-
for res in baseline_results:
167+
# Collate first baseline and all the default_results
168+
resset = baseline_results[0][1]
169+
resname = baseline_results[0][0]
170+
data['baseline'] = resname
171+
for res in resset:
167172
if res == 0:
168173
continue
169174
benchmarks.append(res.benchmark.name)
170-
data['results'][res.benchmark.name] = {data['baseline']: res.value}
175+
data['results'][res.benchmark.name] = {resname: res.value}
171176
for rev_name in default_results:
172177
val = 0
173178
for default_res in default_results[rev_name]:
174179
if default_res.benchmark.name == res.benchmark.name:
175180
val = default_res.value
176-
data['results'][res.benchmark.name][rev_name] = val
181+
data['results'][res.benchmark.name][rev_name] = val
182+
# Collate other baseline
183+
for resname, resset in baseline_results[1:]:
184+
for res in resset:
185+
if res == 0:
186+
continue
187+
if not res.benchmark.name in data['results']:
188+
continue
189+
data['results'][res.benchmark.name][resname] = res.value
190+
data['tagged_revs'].insert(0, resname)
177191
benchmarks.sort()
178192
data['benchmarks'] = benchmarks
179193
return HttpResponse(json.dumps(data))

codespeed/views_data.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ def getbaselineexecutables(include_tags=None):
8383
'name': name,
8484
})
8585
# move default to first place
86-
if hasattr(settings, 'DEF_BASELINE') and settings.DEF_BASELINE is not None:
86+
if hasattr(settings, 'DEF_BASELINES') and settings.DEF_BASELINES is not None:
8787
try:
88-
exename = settings.DEF_BASELINE['executable']
89-
commitid = settings.DEF_BASELINE['revision']
88+
exename = settings.DEF_BASELINES[0]['executable']
89+
commitid = settings.DEF_BASELINES[0]['revision']
9090
for base in baseline:
9191
if base['key'] == "none":
9292
continue

speed_pypy/settings.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@
8989

9090
SHOW_REPORTS = False
9191
SHOW_HISTORICAL = True
92-
DEF_BASELINE = {'executable': 'cpython', 'revision': '3.7.6'}
92+
DEF_BASELINES = [
93+
{'executable': 'cpython', 'revision': '3.7.19'},
94+
{'executable': 'cpython', 'revision': '3.11.9'},
95+
]
9396
DEF_EXECUTABLES = [
9497
{'name': 'pypy3.10-jit-64', 'project': 'PyPy3.10'},
9598
{'name': 'pypy3.9-jit-64', 'project': 'PyPy3.9'},

speed_pypy/templates/home.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ <h3>How has PyPy performance evolved over time?</h3>
112112
plotdata[0].push(relative_value);
113113
plotdata[1].push(1.0);
114114
labels.push(relative_value.toFixed(2));
115-
if (relative_value > 0) {
115+
if (relative_value > 0 && !isNaN(relative_value)) {
116116
trunk_geomean *= relative_value;
117117
}
118118
}
@@ -162,7 +162,10 @@ <h3>How has PyPy performance evolved over time?</h3>
162162
num_of_benchs = tagged_data[i].length;
163163
var tempgeo = 1;
164164
for (var j in tagged_data[i]) {
165-
tempgeo *= tagged_data[i][j];
165+
value = tagged_data[i][j];
166+
if (value > 0 && !isNaN(value)) {
167+
tempgeo *= value;
168+
}
166169
}
167170
tempgeo = Math.pow(tempgeo, 1/tagged_data[i].length);
168171
tempgeo = 1/tempgeo;

0 commit comments

Comments
 (0)