Files
issue-stats/index.html
2023-06-30 13:34:06 +02:00

314 lines
12 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Godot GitHub issue statistics</title>
<link rel="stylesheet" href="thirdparty/water.min.css">
<style>
body {
line-height: 1.6;
}
h2 {
border-top: 0.125rem solid hsla(0, 0%, 50%, 0.4);
padding-top: 0.5rem;
}
</style>
<script src="thirdparty/frappe-charts.umd.min.js"></script>
<script src="thirdparty/ky.umd.min.js"></script>
<script type="module">
const capitalizeStringRemaps = {
macos: "macOS",
ios: "iOS",
amd: "AMD",
intel: "Intel",
nvidia: "NVIDIA",
// CPU x86 features.
avx512: "AVX-512",
avx2: "AVX2",
avx: "AVX",
"sse4.2": "SSE 4.2",
// AMD GPU generations.
dedicated_rdna3: "Dedi. RDNA3",
dedicated_rdna2: "Dedi. RDNA2",
dedicated_rdna1: "Dedi. RDNA1",
"dedicated_gcn5.0": "Dedi. GCN 5.0",
"dedicated_gcn4.0": "Dedi. GCN 4.0",
"dedicated_gcn3.0": "Dedi. GCN 3.0",
"dedicated_gcn2.0": "Dedi. GCN 2.0",
"dedicated_gcn1.0": "Dedi. GCN 1.0",
"dedicated_vliw4": "Dedi. VLIW4",
integrated_rdna3: "IGP RDNA3",
integrated_rdna2: "IGP RDNA2",
"integrated_gcn5.0": "IGP GCN 5.0",
unknown: "Other/Unknown",
};
const chartColors = {
android: "#84CC16",
ios: "#A855F7",
linux: "#EAB308",
macos: "#A8A29E",
web: "#F97316",
windows: "#0EA5E9",
amd: "#b91c1c",
intel: "#2074d9",
nvidia: "#65a30d",
// Windows versions.
7: "#0C4A6E",
8: "#075985",
8.1: "#0369A1",
10: "#0284C7",
11: "#38BDF8",
// macOS versions.
10.12: "#1C1917",
10.13: "#292524",
10.14: "#44403C",
10.15: "#57534E",
// 11 is already taken for Windows 11.
12: "#78716C",
13: "#A8A29E",
14: "#D6D3D1",
// Linux distributions.
ubuntu: "#EA580C",
fedora: "#1E40AF",
debian: "#BE123C",
mint: "#65A30D",
arch: "#0891B2",
// Android versions (some are already reserved above).
5: "#365314",
6: "#3F6212",
9: "#84CC16",
// iOS versions (some are already reserved above).
15: "#C026D3",
16: "#D946EF",
17: "#E879F9",
// Web browsers.
firefox: "#EA580C",
chrome: "#65A30D",
edge: "#0EA5E9",
safari: "#64748B",
opera: "#DC2626",
// CPU x86 features.
avx512: "#F9A8D4",
avx2: "#EC4899",
avx: "#BE185D",
"sse4.2": "#831843",
// GPU feature support.
yes: "#84CC16",
no: "#DC2626",
unknown: "#808080",
// TODO: Add CPU/GPU generation and VRAM size colors.
};
const ChartDatatype = {
// Values are a sum of all subvalues.
AGGREGATE: 0,
// Values are reported individually.
INDIVIDUAL: 1,
}
function getRemappedString(label) {
// Capitalize string (like_this => Like This) if not found in the remaps table.
// Replace "Dedicated" and "Integrated" with shorter forms if not using the remaps table (useful for NVIDIA GPUs).
// Replace " Gb" for VRAM sizes.
return capitalizeStringRemaps[label] ?? label.replaceAll("_", " ").replace(/\b\w/g, l => l.toUpperCase()).replace("Dedicated", "Dedi.").replace("Integrated", "IGP").replace(" Gb", " GB");
}
function getChartColor(label) {
return chartColors[label] ?? '#' + (0x1000000 + (Math.random()) * 0xffffff).toString(16).substr(1, 6);
}
// Function that sums all values in an array (use with `reduce()`).
const sum = (partialSum, value) => partialSum + value;
// Creates a Frappe chart (automatically added to the DOM).
function createChart(id, chartDatatype, dataset) {
new frappe.Chart(id, {
data: {
labels: Object.keys(dataset).map(label => getRemappedString(label)),
datasets: [{ values: chartDatatype == ChartDatatype.INDIVIDUAL ? Object.values(dataset) : Object.values(dataset).map(subObject => Object.values(subObject).reduce(sum, 0)) }],
},
type: "percentage",
colors: Object.keys(dataset).map(label => getChartColor(label)),
});
}
document.addEventListener("DOMContentLoaded", async function () {
const statistics = await ky.get('statistics.json').json();
document.getElementById("num-reports").innerText = statistics.num_reports;
createChart("#chart-operating-system", ChartDatatype.AGGREGATE, statistics.os);
createChart("#chart-windows-version", ChartDatatype.INDIVIDUAL, statistics.os.windows);
createChart("#chart-macos-version", ChartDatatype.INDIVIDUAL, statistics.os.macos);
createChart("#chart-linux-distribution", ChartDatatype.INDIVIDUAL, statistics.os.linux);
createChart("#chart-android-version", ChartDatatype.INDIVIDUAL, statistics.os.android);
createChart("#chart-ios-version", ChartDatatype.INDIVIDUAL, statistics.os.ios);
createChart("#chart-web-browser", ChartDatatype.INDIVIDUAL, statistics.os.web);
createChart("#chart-cpu-vendor", ChartDatatype.AGGREGATE, statistics.cpu);
createChart("#chart-cpu-amd", ChartDatatype.INDIVIDUAL, statistics.cpu.amd);
createChart("#chart-cpu-intel", ChartDatatype.INDIVIDUAL, statistics.cpu.intel);
createChart("#chart-cpu-core-count", ChartDatatype.INDIVIDUAL, statistics.cpu_core_count);
createChart("#chart-cpu-x86-features", ChartDatatype.INDIVIDUAL, statistics.cpu_x86_features);
//createChart("#chart-cpu-passmark-multi", ChartDatatype.INDIVIDUAL, statistics.cpu_passmark_score.multi_thread);
//createChart("#chart-cpu-passmark-single", ChartDatatype.INDIVIDUAL, statistics.cpu_passmark_score.single_thread);
createChart("#chart-gpu-vendor", ChartDatatype.AGGREGATE, statistics.gpu);
createChart("#chart-gpu-amd", ChartDatatype.INDIVIDUAL, statistics.gpu.amd);
createChart("#chart-gpu-intel", ChartDatatype.INDIVIDUAL, statistics.gpu.intel);
createChart("#chart-gpu-nvidia", ChartDatatype.INDIVIDUAL, statistics.gpu.nvidia);
createChart("#chart-gpu-vram", ChartDatatype.INDIVIDUAL, statistics.gpu_vram);
createChart("#chart-gpu-raytracing-dedicated", ChartDatatype.INDIVIDUAL, statistics.gpu_raytracing.dedicated);
createChart("#chart-gpu-raytracing-integrated", ChartDatatype.INDIVIDUAL, statistics.gpu_raytracing.integrated);
createChart("#chart-gpu-vrs-dedicated", ChartDatatype.INDIVIDUAL, statistics.gpu_vrs.dedicated);
createChart("#chart-gpu-vrs-integrated", ChartDatatype.INDIVIDUAL, statistics.gpu_vrs.integrated);
createChart("#chart-gpu-mesh-shaders-dedicated", ChartDatatype.INDIVIDUAL, statistics.gpu_mesh_shaders.dedicated);
createChart("#chart-gpu-mesh-shaders-integrated", ChartDatatype.INDIVIDUAL, statistics.gpu_mesh_shaders.integrated);
//createChart("#chart-gpu-passmark", ChartDatatype.INDIVIDUAL, statistics.gpu_passmark_score);
});
</script>
</head>
<body>
<h1>Godot GitHub issue statistics</h1>
<p>
This page lists hardware and software information reported by users on the
<a href="https://github.com/godotengine/godot/issues">issue tracker of the main Godot repository</a>.
As such, these statistics are <em>not</em> representative of the entire Godot community,
but they allow seeing what kind of hardware and software is popular among issue reporters.
</p>
<p>
These statistics were compiled from
<strong><span id="num-reports">----</span></strong> recent user reports.
</p>
<p>
<strong>Note:</strong> The total number of reported hardware/software
metrics does not add up to this number, as a user may report several
issues with identical hardware/software configuration.
</p>
<h2>Operating system</h2>
<div id="chart-operating-system"></div>
<h3>Windows version</h3>
<div id="chart-windows-version"></div>
<h3>macOS version</h3>
<div id="chart-macos-version"></div>
<h3>Linux distribution</h3>
<div id="chart-linux-distribution"></div>
<h3>Android version</h3>
<div id="chart-android-version"></div>
<h3>iOS version</h3>
<div id="chart-ios-version"></div>
<h3>Web browser</h3>
<em>The web browser used when reporting issues related to the web editor or web export.</em>
<div id="chart-web-browser"></div>
<h2>CPU vendor</h2>
<div id="chart-cpu-vendor"></div>
<h3>AMD CPU generation</h3>
<div id="chart-cpu-amd"></div>
<h3>Intel CPU generation</h3>
<em>Laptop CPUs are currently categorized as "Other/Unknown".</em>
<div id="chart-cpu-intel"></div>
<h2>CPU physical core count</h2>
<em>For CPUs with hybrid (big.LITTLE) topologies, both "big" cores and "little" cores are summed together.</em>
<div id="chart-cpu-core-count"></div>
<h2>Highest supported x86 CPU instruction set</h2>
<em>
Support for a new instruction set implies support for older instruction sets. For instance, supporting AVX-512 implies supporting AVX2, AVX and SSE4.2.<br>
Godot currently only requires SSE2 for official binaries, which is supported on all x86_64 CPUs.
</em>
<div id="chart-cpu-x86-features"></div>
<!-- <h2>CPU multi-thread performance score</h2>
<em>Scores sourced from <a href="https://www.cpubenchmark.net/">PassMark</a>.</em>
<div id="chart-cpu-passmark-multi"></div>
<h2>CPU single-thread performance score</h2>
<em>Scores sourced from <a href="https://www.cpubenchmark.net/">PassMark</a>.</em>
<div id="chart-cpu-passmark-single"></div> -->
<h2>GPU vendor</h2>
<div id="chart-gpu-vendor"></div>
<h3>AMD GPU generation</h3>
<div id="chart-gpu-amd"></div>
<h3>Intel GPU generation</h3>
<div id="chart-gpu-intel"></div>
<h3>NVIDIA GPU generation</h3>
<div id="chart-gpu-nvidia"></div>
<h2>GPU video memory</h2>
<em>Only dedicated GPUs are taken into account.</em>
<div id="chart-gpu-vram"></div>
<h2>GPU hardware-accelerated raytracing support</h2>
<em>
Raytracing is currently not used in Godot.<br>
This metric only checks whether it's supported in hardware, not whether the GPU is fast enough for hardware-accelerated raytracing to be viable for gaming.
</em>
<h3>Dedicated GPUs</h3>
<div id="chart-gpu-raytracing-dedicated"></div>
<h3>Integrated GPUs</h3>
<div id="chart-gpu-raytracing-integrated"></div>
<h2>GPU variable rate shading support</h2>
<em>Variable rate shading can be optionally used in Godot 4.</em>
<h3>Dedicated GPUs</h3>
<div id="chart-gpu-vrs-dedicated"></div>
<h3>Integrated GPUs</h3>
<div id="chart-gpu-vrs-integrated"></div>
<h2>GPU mesh shaders support</h2>
<em>Mesh shaders are currently not used in Godot.</em>
<h3>Dedicated GPUs</h3>
<div id="chart-gpu-mesh-shaders-dedicated"></div>
<h3>Integrated GPUs</h3>
<div id="chart-gpu-mesh-shaders-integrated"></div>
<!-- <h2>GPU performance score</h2>
<em>Scores sourced from <a href="https://www.videocardbenchmark.net/">PassMark</a>.</em>
<div id="chart-gpu-passmark"></div> -->
<footer>
© 2023-present Hugo Locurcio and contributors<br>
<a href="https://github.com/godot-issues-stats/godot-issues-stats.github.io">Website source on GitHub</a>
</footer>
</body>
</html>