eco2d/flecs-dash/etc/apps/overview/performance_graph.js

149 lines
3.6 KiB
JavaScript

const performance_chart = {
type: 'line',
data: {
labels: [],
datasets: [
{
label: 'FPS',
data: [],
backgroundColor: [ 'rgba(0,0,0,0)' ],
borderColor: [
'#5BE595',
],
borderWidth: 2,
pointRadius: 0,
yAxisID: "fps"
},
{
label: 'Frame',
data: [],
backgroundColor: [ 'rgba(0,0,0,0)' ],
borderColor: [
'#6146E6',
],
borderWidth: 2,
pointRadius: 0,
yAxisID: "time"
},
{
label: 'Systems',
data: [],
backgroundColor: [ 'rgba(0,0,0,0)' ],
borderColor: [
'#46D9E6',
],
borderWidth: 2,
pointRadius: 0,
yAxisID: "time"
},
{
label: 'Merging',
data: [],
backgroundColor: [ 'rgba(0,0,0,0)' ],
borderColor: [
'#E550E6',
],
borderWidth: 2,
pointRadius: 0,
yAxisID: "time"
}
]
},
options: {
title: {
display: false
},
responsive: true,
maintainAspectRatio: false,
lineTension: 1,
animation: {
duration: 0
},
scales: {
yAxes: [{
id: 'fps',
ticks: {
beginAtZero: true,
padding: 10,
callback: function(value, index, values) {
return value + "Hz";
}
}
}, {
id: 'time',
position: 'right',
ticks: {
beginAtZero: true,
padding: 10,
callback: function(value, index, values) {
return (1000 * value).toFixed(2) + "ms";
}
}
}],
xAxes: [{
ticks: {
minRotation: 0,
maxRotation: 0,
maxTicksLimit: 20
}
}]
}
}
}
Vue.component('performance-graph', {
props: ['tick', 'data'],
updated() {
this.updateChart();
},
data: function() {
return {
chart: undefined
}
},
methods: {
setValues() {
if (!this.data.world) {
return;
}
if (!this.chart) {
this.createChart();
}
var labels = [];
var length = this.data.world.history_1m.frame_time_total.avg.length;
for (var i = 0; i < length; i ++) {
labels.push((length - i) + "s");
}
performance_chart.data.labels = labels;
performance_chart.data.datasets[0].data = this.data.world.history_1m.fps.avg;
performance_chart.data.datasets[1].data = this.data.world.history_1m.frame_time_total.avg;
performance_chart.data.datasets[2].data = this.data.world.history_1m.system_time_total.avg;
performance_chart.data.datasets[3].data = this.data.world.history_1m.merge_time_total.avg;
},
createChart() {
const ctx = document.getElementById('fps-graph');
performance_chart.options.scales.yAxes[1].ticks.suggestedMax = 1.0 / this.data.target_fps;
this.chart = new Chart(ctx, {
type: performance_chart.type,
data: performance_chart.data,
options: performance_chart.options
});
},
updateChart() {
if (!this.data.world) {
return;
}
this.setValues();
this.chart.update();
}
},
template: `
<div class="app-graph">
<canvas id="fps-graph" :data-fps="tick"></canvas>
</div>`
});