Skip to content

Commit a106c17

Browse files
committed
Information
1 parent 6bf97c8 commit a106c17

File tree

1 file changed

+133
-3
lines changed

1 file changed

+133
-3
lines changed

site/static/compare.html

Lines changed: 133 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,27 @@ <h1>Comparing <span id="stat-header">instructions:u</span> between <span id="bef
250250
<span>{{data.b.date}}</span>
251251
<span>({{short(data.b)}})</span>
252252
</div>
253+
<a v-if="data.next" v-bind:href="nextLink">&rarr;</a>
254+
<a v-if="data.a.pr" v-bind:href="prLink(data.a.pr)">#{{data.a.pr}}</a>
255+
<a v-if="data.b.pr" v-bind:href="prLink(data.b.pr)">#{{data.b.pr}}</a>
256+
<div v-for="bench in benches">
257+
<div>
258+
<div>
259+
{{ bench.name }} ({{bench.casename}})
260+
</div>
261+
<a v-bind:href="detailedQueryLink(data.a.commit, bench.name, bench.casename)">
262+
{{ bench.datum_a }}
263+
</a>
264+
<a v-bind:href="detailedQueryLink(data.b.commit, bench.name, bench.casename)">
265+
{{ bench.datum_b }}
266+
</a>
267+
<a v-bind:class="percentClass(bench.percent)"
268+
v-bind:href="percentLink(data.b.commit, data.a.commit, bench.name, bench.casename)">
269+
{{ bench.percent }} %
270+
</a>
271+
</div>
272+
</div>
253273
</div>
254-
<a v-if="data.next" v-bind:href="nextLink">&rarr;</a>
255-
<a v-if="data.a.pr" v-bind:href="prLink(data.a.pr)">#{{data.a.pr}}</a>
256-
<a v-if="data.b.pr" v-bind:href="prLink(data.b.pr)">#{{data.b.pr}}</a>
257274
</div>
258275
<br>
259276
<div id="as-of"></div>
@@ -283,6 +300,98 @@ <h1>Comparing <span id="stat-header">instructions:u</span> between <span id="bef
283300
},
284301
compareLink: function () {
285302
return `https://github.com/rust-lang/rust/compare/${this.data.a.commit}...${this.data.b.commit}`;
303+
},
304+
benches: function () {
305+
let data = this.data;
306+
307+
308+
function shouldShowBuild(name) {
309+
if (name == "full") {
310+
return document.querySelector("#build-full").checked;
311+
} else if (name == "incr-full") {
312+
return document.querySelector("#build-incremental-full").checked;
313+
} else if (name == "incr-unchanged") {
314+
return document.querySelector("#build-incremental-unchanged").checked;
315+
} else if (name.startsWith("incr-patched")) {
316+
return document.querySelector("#build-incremental-patched").checked;
317+
} else {
318+
// Unknown, but by default we should show things
319+
return true;
320+
}
321+
}
322+
function to_fields(name) {
323+
let source = data.a.data[name] || data.b.data[name];
324+
let max_length = 0;
325+
if (data.a.data[name]) {
326+
max_length = data.a.data[name].length;
327+
}
328+
if (data.b.data[name] && data.b.data[name].length > max_length) {
329+
max_length = data.b.data[name].length;
330+
}
331+
332+
let keys = {};
333+
if (data.a.data[name]) {
334+
for (let i = 0; i < data.a.data[name].length; i++) {
335+
if (!keys[data.a.data[name][i][0]]) {
336+
keys[data.a.data[name][i][0]] = {};
337+
}
338+
keys[data.a.data[name][i][0]].a_idx = i;
339+
}
340+
}
341+
if (data.b.data[name]) {
342+
for (let i = 0; i < data.b.data[name].length; i++) {
343+
if (!keys[data.b.data[name][i][0]]) {
344+
keys[data.b.data[name][i][0]] = {};
345+
}
346+
keys[data.b.data[name][i][0]].b_idx = i;
347+
}
348+
}
349+
350+
let fields = [];
351+
for (let key in keys) {
352+
let a_idx = keys[key].a_idx;
353+
let b_idx = keys[key].b_idx;
354+
let datum_a = null;
355+
let datum_b = null;
356+
if (a_idx != undefined && b_idx != undefined) {
357+
datum_a = data.a.data[name][a_idx][1];
358+
datum_b = data.b.data[name][b_idx][1];
359+
} else if (a_idx != undefined) {
360+
datum_a = data.a.data[name][a_idx][1];
361+
} else if (b_idx != undefined) {
362+
datum_b = data.b.data[name][b_idx][1];
363+
} else {
364+
// should be unreachable
365+
}
366+
if (shouldShowBuild(key)) {
367+
fields.push({
368+
name,
369+
casename: key,
370+
datum_a,
371+
datum_b,
372+
percent: percent_chg(datum_a, datum_b).toFixed(1),
373+
});
374+
}
375+
}
376+
377+
return fields;
378+
}
379+
let test_names = unique([
380+
...Object.keys(data.a.data),
381+
...Object.keys(data.b.data),
382+
]);
383+
// let bootstrap_names = unique([
384+
// ...Object.keys(data.a.bootstrap),
385+
// ...Object.keys(data.b.bootstrap),
386+
// ]);
387+
388+
let fields = [
389+
// ...bootstrap_names
390+
// .map(name => name)
391+
// .map(name => ({ name, is_bootstrap: true, fields: to_fields_bootstrap(name) })),
392+
...test_names.map(name => to_fields(name)).flat()
393+
];
394+
return fields;
286395
}
287396
},
288397
methods: {
@@ -291,7 +400,28 @@ <h1>Comparing <span id="stat-header">instructions:u</span> between <span id="bef
291400
},
292401
prLink: function (pr) {
293402
return `https://github.com/rust-lang/rust/pull/${pr}`;
403+
},
404+
percentClass: function (pct) {
405+
let klass = "";
406+
if (pct > 1) {
407+
klass = 'positive';
408+
} else if (pct > 0.1) {
409+
klass = 'slightly-positive';
410+
} else if (pct < -1) {
411+
klass = 'negative';
412+
} else if (pct < -0.1) {
413+
klass = 'slightly-negative';
414+
}
415+
return klass;
416+
417+
},
418+
detailedQueryLink(commit, bench, run) {
419+
return `/detailed-query.html?commit=${commit}&benchmark=${bench}&run_name=${run}`;
420+
},
421+
percentLink(commit, baseCommit, bench, run) {
422+
return `/detailed-query.html?commit=${commit}&base_commit=${baseCommit}&benchmark=${bench}&run_name=${run}`;
294423
}
424+
295425
}
296426
})
297427
function toggleFilters(id, toggle) {

0 commit comments

Comments
 (0)