in assets/android-metrics.js [159:226]
function displayChartForMetric(data, metric, name, unit) {
const filteredData = data.filter(row => row.test === metric);
const groupedData = {};
let url="https://treeherder.mozilla.org/perfherder/graphs?highlightAlerts=1&highlightChangelogData=1&highlightCommonAlerts=0&timerange=2592000"
const signatureIds = new Set()
filteredData.forEach(row => {
if (url !== undefined && !signatureIds.has(row.signature_id)) {
let signature_id = row.signature_id;
let framework_id = row.framework_id;
let repository_id = row.repository_id;
if (signature_id && framework_id && repository_id) {
url += `&series=mozilla-central,${signature_id},${repository_id},${framework_id}`
} else {
url = undefined;
}
signatureIds.add(signature_id);
}
});
// Update the title to a link to the perfherder page.
if (url) {
const title = document.getElementById(name+"-section");
if (title) {
let link = document.createElement("a");
link.href = url;
link.style.textDecoration = "none";
title.parentNode.insertBefore(link, title);
link.appendChild(title);
}
}
// Group data by application
filteredData.forEach(item => {
if (!groupedData[item.application]) {
groupedData[item.application] = [];
}
groupedData[item.application].push({
x: new Date(item.date), // Convert date to Date object for x-axis
y: item.value // Use value for y-axis
});
});
dataset = Object.keys(groupedData).map((app, index) => ({
label: app,
data: groupedData[app],
fill: false,
backgroundColor: getAppColor(app),
borderWidth: 1,
tension: 0.1,
}));
// Only add trendline's when there are enough data points.
dataset.forEach(ds => {
if (ds.data.length > 5) {
ds["trendlineLinear"] = {
colorMin: getAppColor(ds.label),
colorMax: getAppColor(ds.label),
style: "rgba(255,105,180, .8)",
lineStyle: "dotted",
width: 2
}
}
});
plotChart(metric, dataset, unit);
}