Skip to content

Commit

Permalink
Refactor plotting code. Move to codespeed.js.
Browse files Browse the repository at this point in the history
  • Loading branch information
tobami committed May 28, 2010
1 parent 01e52cf commit 49b6424
Show file tree
Hide file tree
Showing 2 changed files with 206 additions and 178 deletions.
201 changes: 201 additions & 0 deletions speedcenter/media/js/codespeed.js
Expand Up @@ -58,3 +58,204 @@ function getColorcode(change, theigh, tlow) {
else if(change > theigh) { colorcode = "status-green"; }
return colorcode;
}

function renderComparisonPlot(plotid, benchmarks, exes, enviros, baseline, chart, horizontal) {
var axislabel = "";
var title = "";
if (baseline == "none") {
title = "Absolute ";
if (chart == "stacked bars") { title += "cummulative "; }
title += unit;
axislabel = unit + bench_units[unit][1];
} else {
title = "Relative ";
if (chart == "stacked bars") { title += "cummulative "; }
title += unit;
axislabel = "Relative to " + $("label[for='exe_" + baseline + "']").text() + bench_units[unit][1];
}

var plotdata = new Array();
var ticks = new Array();
var series = new Array();
var barcounter = 0;

if (chart == "normal bars") {
// Add tick labels
for (var b in benchmarks) {
var benchlabel = $("label[for='benchmark_" + benchmarks[b] + "']").text();
ticks.push(benchlabel);
}
// Add data
for (var i in exes) {
for (var j in enviros) {
var exe = $("label[for='exe_" + exes[i] + "']").text();
var env = $("label[for='env_" + enviros[j] + "']").text();
series.push({'label': exe + " @ " + env});
var customdata = new Array();
var benchcounter = 0;

for (var b in benchmarks) {
benchcounter++;
barcounter++;
var val = compdata[exes[i]][enviros[j]][benchmarks[b]];
if (baseline != "none") {
axislabel = "Relative to " + $("label[for='exe_" + baseline + "']").text() + bench_units[unit][1];
var baseval = compdata[baseline][enviros[j]][benchmarks[b]]
if ( baseval == 0 ) { val = 0; }
else { val = val / baseval; }
}

if (!horizontal) {
customdata.push(val);
} else {
customdata.push([val, benchcounter]);
}
}
plotdata.push(customdata);
}
}

} else if (chart == "stacked bars") {
// Add tick labels
for (var i in exes) {
for (var j in enviros) {
var exe = $("label[for='exe_" + exes[i] + "']").text();
var env = $("label[for='env_" + enviros[j] + "']").text();
ticks.push(exe + " @ " + env);
}
}
// Add data
for (var b in benchmarks) {
var benchlabel = $("label[for='benchmark_" + benchmarks[b] + "']").text();
series.push({'label': benchlabel});
var customdata = new Array();
var benchcounter = 0;
barcounter = 1;
for (var i in exes) {
for (var j in enviros) {
benchcounter++;
var exe = $("label[for='exe_" + exes[i] + "']").text();
var env = $("label[for='env_" + enviros[j] + "']").text();
var val = compdata[exes[i]][enviros[j]][benchmarks[b]];
if (baseline != "none") {
var base = compdata[baseline][enviros[j]][benchmarks[b]]
if ( base == 0 ) { val = 0; }
else { val = val / base; }
}
if (!horizontal) {
customdata.push(val);
} else {
customdata.push([val, benchcounter]);
}
}
}
plotdata.push(customdata);
}
} else {
// no valid chart type
return false;
}

// Set plot options and size depending on:
// - Bar orientation (horizontal/vertical)
// - Screen width and number of bars being displayed
var barWidth = 20;
var w = 0;
var h = 0;
var plotoptions = new Object();
if (horizontal) {
plotoptions = {
title: title,
seriesDefaults: {
renderer:$.jqplot.BarRenderer,
rendererOptions:{barDirection: "horizontal", barPadding: 8, barMargin: 15}
},
axesDefaults: {
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
tickOptions: {angle: 0}
},
axes: {
xaxis:{
min:0,
autoscale:true,
label: axislabel,
labelRenderer: $.jqplot.CanvasAxisLabelRenderer
},
yaxis:{
renderer:$.jqplot.CategoryAxisRenderer,
ticks: ticks
}
}
}
h = barcounter * (plotoptions.seriesDefaults.rendererOptions.barPadding*2 + barWidth) + benchcounter * plotoptions.seriesDefaults.rendererOptions.barMargin * 2;
if (w > 820) {
h = h/2;
plotoptions.seriesDefaults.rendererOptions.barPadding = 4;
plotoptions.seriesDefaults.rendererOptions.barMargin = 10;
plotoptions.seriesDefaults.shadow = false;
} else if (h < 300) {
h = 300;
plotoptions.seriesDefaults.rendererOptions.barPadding = 14;
plotoptions.seriesDefaults.rendererOptions.barMargin = 25;
}
w = "100%";
} else {
plotoptions = {
title: title,
seriesDefaults: {
renderer:$.jqplot.BarRenderer,
rendererOptions:{barDirection: "vertical", barPadding: 6, barMargin: 15}
},
axesDefaults: {
tickRenderer: $.jqplot.CanvasAxisTickRenderer
},
axes: {
xaxis:{
renderer:$.jqplot.CategoryAxisRenderer,
ticks: ticks,
tickOptions: {angle: 0}
},
yaxis:{
min:0,
autoscale:true,//no effect due to min = 0
label: axislabel,
labelRenderer: $.jqplot.CanvasAxisLabelRenderer
}
}
}

w = barcounter * (plotoptions.seriesDefaults.rendererOptions.barPadding*2 + barWidth) + benchcounter * plotoptions.seriesDefaults.rendererOptions.barMargin * 2 + 60;
h = plotheight;
var plotwidth = $("#plotwrapper").width();
if (w > plotwidth + 180) {
plotoptions.seriesDefaults.rendererOptions.barPadding = 4;
plotoptions.seriesDefaults.rendererOptions.barMargin = 10;
plotoptions.seriesDefaults.shadow = false;
}
if (w > plotwidth + 80) {
plotoptions.axes.xaxis.tickOptions.angle = -30;
}
if (w > plotwidth) {
w = plotwidth;
} else if (w < 300) {
w = 300;
plotoptions.seriesDefaults.rendererOptions.barPadding = 15;
plotoptions.seriesDefaults.rendererOptions.barMargin = 25;
}
if (chart == "stacked bars") {
plotoptions.axes.xaxis.tickOptions.angle = -30;
plotoptions.seriesDefaults.rendererOptions.barMargin += 5;
}
}
plotoptions.legend = {show: true, location: 'ne'};
plotoptions.series = series;
if (chart == "stacked bars") {
plotoptions.stackSeries = true;
}
/* End set plot style */

// Render plot
$("#" + plotid).css('width', w);
$("#" + plotid).css('height', h);
plot = $.jqplot(plotid, plotdata, plotoptions);
}

0 comments on commit 49b6424

Please sign in to comment.