django-components/docs/benchmarks/summarygrid.js
Juro Oravec f36581ed86
feat: benchmarking (#999)
* feat: add benchmarking dashboard, CI hook on PR, and store lifetime results

* refactor: change python env to 3.13 in benchmarks

* refactor: add verbosity, use 3.11 for benchmarking

* fix: OSError: [Errno 7] Argument list too long

* refactor: add debug statements

* refactor: remove extraneous -e

* refactor: fix tests and linter errors

* fix: track main package in coverage

* refactor: fix test coverage testing

* refactor: fix repo owner name in benchmark on pushing comment

* refactor: add asv monkeypatch to docs workflow

* refactor: temporarily allow building docs in forks

* refactor: use py 3.13 for benchmarking

* refactor: run only a single benchmark for PRs to speed them up

* refactor: install asv in the docs build workflow

* refactor: use hatch docs env to generate benhcmarks in docs CI

* refactor: more trying

* refactor: move tests

* Add benchmark results for 0.137

* Trigger Build

* Add benchmark results for 0.138

* refactor: set constant machine name when benchmarking

* Add benchmark results for 0.139

* refactor: fix issue with paths too long

* Add benchmark results for 0.140

* docs: update comment

* refactor: remove test benchmarking data

* refactor: fix comment

* refactor: allow the benchmark workflow to write to PRs

* refactor: use personal access token to set up the PR benchmark bot

* refactor: split the benchmark PR flow into two to make it work with PRs from forks

* refactor: update deprecated actions/upload-artifact@v3 to v4

* refactor: fix missing directory in benchmarking workflow

* refactor: fix triggering of second workflow

* refactor: fix workflow finally?

* docs: add comments to cut-offs and direct people to benchmarks PR

---------

Co-authored-by: github-actions <github-actions@github.com>
2025-02-23 16:18:57 +01:00

136 lines
4.3 KiB
JavaScript

'use strict';
$(document).ready(function() {
var summary_loaded = false;
/* Callback a function when an element comes in view */
function callback_in_view(element, func) {
function handler(evt) {
var visible = (
$('#summarygrid-display').css('display') != 'none' &&
(element.offset().top <= $(window).height() + $(window).scrollTop()) &&
(element.offset().top + element.height() >= $(window).scrollTop()));
if (visible) {
func();
$(window).off('scroll', handler);
}
}
$(window).on('scroll', handler);
}
function get_benchmarks_by_groups() {
var main_json = $.asv.main_json;
var groups = {};
$.each(main_json.benchmarks, function(bm_name, bm) {
var i = bm_name.indexOf('.');
var group = bm_name.slice(0, i);
var name = bm_name.slice(i + 1);
if (groups[group] === undefined) {
groups[group] = [];
}
groups[group].push(bm_name);
});
return groups;
}
function benchmark_container(bm) {
var container = $(
'<a class="btn benchmark-container" href="#' + bm.name +
'"/>');
var plot_div = $(
'<div id="summarygrid-' + bm.name + '" class="benchmark-plot"/>');
var display_name = bm.pretty_name || bm.name.slice(bm.name.indexOf('.') + 1);
var name = $('<div class="benchmark-text">' + display_name + '</div>');
name.tooltip({
title: bm.name,
html: true,
placement: 'top',
container: 'body',
animation: false
});
plot_div.tooltip({
title: bm.code,
html: true,
placement: 'bottom',
container: 'body',
animation: false
});
container.append(name);
container.append(plot_div);
callback_in_view(plot_div, function() {
$.asv.load_graph_data(
'graphs/summary/' + bm.name + '.json'
).done(function(data) {
var options = {
colors: $.asv.colors,
series: {
lines: {
show: true,
lineWidth: 2
},
shadowSize: 0
},
grid: {
borderWidth: 1,
margin: 0,
labelMargin: 0,
axisMargin: 0,
minBorderMargin: 0
},
xaxis: {
ticks: [],
},
yaxis: {
ticks: [],
min: 0
},
legend: {
show: false
}
};
var plot = $.plot(
plot_div, [{data: data}], options);
}).fail(function() {
// TODO: Handle failure
});
});
return container;
}
function make_summary() {
var summary_display = $('#summarygrid-display');
var main_json = $.asv.main_json;
var summary_container = $('<div/>');
if (summary_loaded) {
return;
}
$.each(get_benchmarks_by_groups(), function(group, benchmarks) {
var group_container = $('<div class="benchmark-group"/>')
group_container.attr('id', 'group-' + group)
group_container.append($('<h1>' + group + '</h1>'));
summary_display.append(group_container);
$.each(benchmarks, function(i, bm_name) {
var bm = $.asv.main_json.benchmarks[bm_name];
group_container.append(benchmark_container(bm));
});
});
summary_display.append(summary_container);
$(window).trigger('scroll');
summary_loaded = true;
}
$.asv.register_page('', function(params) {
$('#summarygrid-display').show();
$("#title").text("All benchmarks");
$('.tooltip').remove();
make_summary();
});
});