From 1d37fb1e39f37efb47c4efda51a4a4fb420a46f8 Mon Sep 17 00:00:00 2001 From: Anton Egorushkin Date: Thu, 18 Dec 2025 00:44:10 +0100 Subject: [PATCH] Pre-computed tooltips implemented. --- html/benchmarks.js | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/html/benchmarks.js b/html/benchmarks.js index a3c5e60..92cab04 100644 --- a/html/benchmarks.js +++ b/html/benchmarks.js @@ -57,47 +57,40 @@ $(function() { const series = []; for(const [name, stats] of Object.entries(results)) { const s = settings[name]; + const [color, index] = s; series.push({ name: name, - color: s[0], - index: s[1], + color: color, + index: index, type: "column", - data: stats.map(a => [a[0], a[3]]), - atomic_queue_stats: stats, + data: stats.map((a) => { + const [min, max, mean, stdev] = a.slice(1).map(prec0); + return { + x: a[0], + y: a[3], + tooltip_row: `${name}: ${mean}${stdev}${min}${max}` + }; + }), }); series.push({ name: `${name} StdDev`, type: 'errorbar', - index: s[1], + index: index, data: stats.map(a => [a[0], a[3] - a[4], a[3] + a[4]]), }); } - const tooltips = []; const tooltip_formatter = function() { - const n_threads = this.x; - const tooltip = tooltips[n_threads]; - if(tooltip) - return tooltip; - - const data = []; - for(const p of this.points) { - const [n_threads, min, max, mean, stdev] = p.series.options.atomic_queue_stats[p.point.index].map(prec0); - data[p.series.options.index] = { - name: p.series.name, - color: p.series.color, - min: min, - max: max, - mean: mean, - stdev: stdev, - }; - } - const tbody = data.map((d) => `${d.name}: ${d.mean}${d.stdev}${d.min}${d.max}`).join('\n') - return tooltips[n_threads] = ` + const { x: n_threads, points } = this; + const rows = points + .map(point => point.options.tooltip_row) + .join('\n'); + + return ` ${n_threads} producers, ${n_threads} consumers - ${tbody} + ${rows}
meanstdevminmax
`; };