blob: b57fba60f6578fe648168c8559815ce3a9afb0f9 [file] [log] [blame]
// Get the DOM container for the plot
var containerDOM = document.getElementById('appending_a_log_message_plot');
if (!containerDOM) {
throw new Error("Could not find 'appending_a_log_message_plot' element");
}
var myChart = echarts.init(containerDOM, null, { renderer: 'canvas' });
// Find the benchmark html table
var benchmark_data = null;
var element = document.getElementById('benchmark_data_marker');
while (element && element.tagName) {
if (element.tagName === 'TABLE') {
benchmark_data = element;
break;
}
element = element.nextElementSibling;
}
if (!benchmark_data) {
throw new Error("Could not find benchmark data");;
}
// Identify the benchmark tests to be included on the plot
var benchmark_pattern = [];
benchmark_pattern.push(new RegExp("Appending (.*) using ([A-Za-z]+), pattern: \\%m\\%n$"));
benchmark_pattern.push(new RegExp("Async, Sending (.*) using ([A-Za-z <]+)$"));
const value_regex_pattern = new RegExp("([0-9]+) ns")
// Extract the data
var plot_data = new Map();
var xAxisLabels = [];
for (const row of benchmark_data.rows) {
const columns = row.cells;
if (2 < columns.length) {
const value_match = value_regex_pattern.exec(columns[1].innerText);
if (value_match && 1 < value_match.length) {
for (const pattern of benchmark_pattern) {
const benchmark_match = pattern.exec(columns[0].innerText);
if (benchmark_match && 2 < benchmark_match.length) {
if (!xAxisLabels.includes(benchmark_match[1])) {
xAxisLabels.push(benchmark_match[1]);
}
var keyValueMap = plot_data.get(benchmark_match[2]);
if (!keyValueMap) {
keyValueMap = new Map();
plot_data.set(benchmark_match[2], keyValueMap);
}
keyValueMap.set(benchmark_match[1], value_match[1]);
}
}
}
}
}
// Generate a series for each legend
var legend_data = [];
var series_data = [];
for (const [key, keyValueMap] of plot_data.entries()) {
legend_data.push(key);
var series_values = [];
for (const label of xAxisLabels) {
var value = keyValueMap.get(label);
series_values.push(value ? parseInt(value) : null);
}
var series_data_item = {
name: key,
type: 'line',
data: series_values
};
series_data.push(series_data_item);
}
// Configure the chart
var chart_data = {
title: { text: 'Appending a log message' },
yAxis: {
name: 'Average elapsed time (ns)',
nameLocation: 'center'
},
legend: {
orient: 'vertical',
left: 150,
top: 'center',
data: legend_data
},
xAxis: {
axisTick: { alignWithLabel: true },
axisLabel: { rotate: 30 },
name: 'Log message content',
nameLocation: 'center',
data: xAxisLabels
},
series: series_data
};
// Display the chart
myChart.setOption(chart_data);