Support hiding statistics for specific scenes
This way it's possible to see side-by-side results of CPU and GPU time on "fast" scenes, without having Victor scene making bars for bmw really tiny.
This commit is contained in:
@@ -23,6 +23,8 @@
|
|||||||
var chart_ctx = document.getElementById("canvas").getContext("2d");
|
var chart_ctx = document.getElementById("canvas").getContext("2d");
|
||||||
buildChart(chart_ctx, data);
|
buildChart(chart_ctx, data);
|
||||||
|
|
||||||
|
buildScenesSelector(document.getElementById("container"), data);
|
||||||
|
|
||||||
var table_ctx = document.getElementById("spreadsheet");
|
var table_ctx = document.getElementById("spreadsheet");
|
||||||
buildSpreadsheet(table_ctx, data);
|
buildSpreadsheet(table_ctx, data);
|
||||||
};
|
};
|
||||||
|
@@ -20,6 +20,10 @@ function generateBarColor(index) {
|
|||||||
color[2].toString() + ")";
|
color[2].toString() + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clone(object) {
|
||||||
|
return jQuery.extend(true, {}, object);
|
||||||
|
}
|
||||||
|
|
||||||
function padValue(value, size) {
|
function padValue(value, size) {
|
||||||
var s = String(value);
|
var s = String(value);
|
||||||
while (s.length < (size || 2)) {
|
while (s.length < (size || 2)) {
|
||||||
@@ -75,7 +79,7 @@ function findDatasetMaxValue(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function buildChart(ctx, bare_data) {
|
function buildChart(ctx, bare_data) {
|
||||||
var data = bare_data;
|
var data = clone(bare_data);
|
||||||
setDatasetColor(data, true);
|
setDatasetColor(data, true);
|
||||||
var my_chart = new Chart(
|
var my_chart = new Chart(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -116,6 +120,69 @@ function buildChart(ctx, bare_data) {
|
|||||||
footerFontStyle: 'normal'},
|
footerFontStyle: 'normal'},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// TODO(sergey): How can we avoid storing chart in some obscure global variable?
|
||||||
|
window.my_chart = my_chart;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateEnabledScenesCallback(bare_data) {
|
||||||
|
/* Collect list of enabled scenes. */
|
||||||
|
var enabled_scenes = [];
|
||||||
|
var disabled_scenes = [];
|
||||||
|
var scene_index = 0;
|
||||||
|
for (scene_name of bare_data.labels) {
|
||||||
|
var id = "scene_" + scene_name + "_id";
|
||||||
|
var checkbox = document.getElementById(id);
|
||||||
|
if (checkbox.checked) {
|
||||||
|
enabled_scenes.push({"index": scene_index, "name": scene_name});
|
||||||
|
} else {
|
||||||
|
disabled_scenes.push({"index": scene_index, "name": scene_name});
|
||||||
|
}
|
||||||
|
++scene_index;
|
||||||
|
}
|
||||||
|
/* Construct new data by making a copy of original one and removing
|
||||||
|
* disabeld scenes.
|
||||||
|
*
|
||||||
|
* Note: we reverse te list so indices for removal are alweays staying
|
||||||
|
* the same.
|
||||||
|
*/
|
||||||
|
disabled_scenes.reverse();
|
||||||
|
var updated_data = clone(bare_data);
|
||||||
|
setDatasetColor(updated_data, true);
|
||||||
|
for (scene of disabled_scenes) {
|
||||||
|
// Remove label first.
|
||||||
|
updated_data.labels.splice(scene.index, 1);
|
||||||
|
updated_data.datasets.forEach(function(dataset, dataset_index) {
|
||||||
|
dataset.data.splice(scene.index, 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/* Update the actual chart. */
|
||||||
|
var my_chart = window.my_chart;
|
||||||
|
my_chart.data = updated_data;
|
||||||
|
my_chart.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildScenesSelector(ctx, bare_data) {
|
||||||
|
var div = document.createElement("div");
|
||||||
|
div.className = "scene_selector_container";
|
||||||
|
for (scene_name of data.labels) {
|
||||||
|
var span = document.createElement("span");
|
||||||
|
|
||||||
|
var checkbox = document.createElement('input');
|
||||||
|
checkbox.type = "checkbox";
|
||||||
|
checkbox.name = "scene_" + scene_name;
|
||||||
|
checkbox.checked = true;
|
||||||
|
checkbox.id = "scene_" + scene_name + "_id";
|
||||||
|
checkbox.onclick = function() { updateEnabledScenesCallback(bare_data); };
|
||||||
|
span.appendChild(checkbox);
|
||||||
|
|
||||||
|
var label = document.createElement('label');
|
||||||
|
label.htmlFor = "scene_" + scene_name + "_id";
|
||||||
|
label.appendChild(document.createTextNode(scene_name));
|
||||||
|
span.appendChild(label);
|
||||||
|
|
||||||
|
div.appendChild(span);
|
||||||
|
}
|
||||||
|
ctx.appendChild(div);
|
||||||
}
|
}
|
||||||
|
|
||||||
function historyChartGetSceneStats(bare_data, scene_name) {
|
function historyChartGetSceneStats(bare_data, scene_name) {
|
||||||
|
@@ -6,4 +6,13 @@ canvas {
|
|||||||
|
|
||||||
#container {
|
#container {
|
||||||
width: 75%;
|
width: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.scene_selector_container {
|
||||||
|
margin-top: 8px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.scene_selector_container span {
|
||||||
|
margin-left: 16px;
|
||||||
}
|
}
|
Reference in New Issue
Block a user