summaryrefslogtreecommitdiff
path: root/python/gras
diff options
context:
space:
mode:
authorJosh Blum2013-03-05 01:55:38 -0600
committerJosh Blum2013-03-05 01:55:38 -0600
commit9f7169ecd0c8349fc33ad933c9dc5f23ac538146 (patch)
tree1c71b30ca2a20dd94224f89cd14ad059f8cac7be /python/gras
parent91241f9273fa2b39d9cdb6958710b808f13cb48f (diff)
downloadsandhi-9f7169ecd0c8349fc33ad933c9dc5f23ac538146.tar.gz
sandhi-9f7169ecd0c8349fc33ad933c9dc5f23ac538146.tar.bz2
sandhi-9f7169ecd0c8349fc33ad933c9dc5f23ac538146.zip
stats: added comparison chart
Diffstat (limited to 'python/gras')
-rw-r--r--python/gras/stats/charts.js128
-rw-r--r--python/gras/stats/main.css5
-rw-r--r--python/gras/stats/main.html9
-rw-r--r--python/gras/stats/main.js2
-rw-r--r--python/gras/stats/utils.js15
5 files changed, 108 insertions, 51 deletions
diff --git a/python/gras/stats/charts.js b/python/gras/stats/charts.js
index 5f0f65c..0fb6952 100644
--- a/python/gras/stats/charts.js
+++ b/python/gras/stats/charts.js
@@ -1,13 +1,6 @@
/***********************************************************************
- * charts and visualization stuff
+ * Throughput chart
**********************************************************************/
-
-var gras_animate_show_hide = function(elem, show)
-{
- if (show) elem.slideDown("fast");
- else elem.slideUp("fast");
-}
-
var gras_setup_overall_chart = function(registry)
{
var div = $('#overall_chart:first');
@@ -16,6 +9,84 @@ var gras_setup_overall_chart = function(registry)
registry.overall_chart = chart;
}
+var gras_update_throughput_chart = function(registry)
+{
+ if (registry.history.length == 1)
+ {
+ var id = $('gras_stats:first', registry.history[0]).attr('id');
+ $('h1:first').append(' - ' + id);
+ gras_setup_individual_charts(registry);
+ return;
+ }
+ if (registry.history.length < 2) return;
+
+ var ids = new Array();
+ $.each(registry.getBlockIds(), function(index, id)
+ {
+ if (registry.block_enables[id]) ids.push(id);
+ });
+
+ var data_set = [['Throughput'].concat(ids)];
+ for (var i = Math.max(registry.history.length-10, 1); i < registry.history.length; i++)
+ {
+ var row = new Array();
+ row.push(i.toString());
+ for (var j = 0; j < ids.length; j++)
+ {
+ row.push(gras_extract_throughput_delta(registry.history[i-1], registry.history[i], ids[j])/1e6);
+ }
+ data_set.push(row);
+ }
+
+ var chart_data = google.visualization.arrayToDataTable(data_set);
+ var options = {
+ width:$('#page').width()*0.9,
+ height:'250',
+ chartArea:{left:0,top:0,right:0,bottom:0,width:"100%",height:"85%"},
+ legend: {'position': 'bottom'},
+ };
+ registry.overall_chart.draw(chart_data, options);
+}
+
+/***********************************************************************
+ * Overhead comparison chart
+ **********************************************************************/
+var gras_setup_overall_chart_pie = function(registry)
+{
+ var div = $('#overall_chart_pie:first');
+ var td = $('td:last', div);
+ var chart = new google.visualization.PieChart(td.get(0));
+ registry.overall_chart_pie = chart;
+}
+
+var gras_update_time_compare_chart = function(registry)
+{
+ var point = registry.history[registry.history.length-1];
+ var data_set = new Array();
+ data_set.push(['Task', 'Percent']);
+ $.each(registry.getBlockIds(), function(index, id)
+ {
+ if (registry.block_enables[id])
+ {
+ var percents = gras_extract_percent_times(point, id);
+ data_set.push([id, percents['total']]);
+ }
+ });
+
+ var data = google.visualization.arrayToDataTable(data_set)
+
+ var options = {
+ width:$('#page').width()/5,
+ chartArea:{left:5,top:0,right:5,bottom:0,width:"100%",height:"100%"},
+ };
+
+ var chart = registry.overall_chart_pie;
+ chart.draw(data, options);
+}
+
+/***********************************************************************
+ * Block handler breakdown chart
+ **********************************************************************/
var gras_setup_per_block_enable_checkbox = function(elem, id, registry)
{
$(elem).append('<label>' + id + '</label>');
@@ -69,7 +140,6 @@ var gras_setup_individual_charts = function(registry)
config = $('td:last', div);
}
});
-
}
var gras_update_per_block_chart = function(id, registry)
@@ -102,43 +172,3 @@ var gras_update_per_block_charts = function(registry)
gras_update_per_block_chart(id, registry);
});
}
-
-var gras_update_throughput_chart = function(registry)
-{
- if (registry.history.length == 1)
- {
- var id = $('gras_stats:first', registry.history[0]).attr('id');
- $('h1:first').append(' - ' + id);
- gras_setup_individual_charts(registry);
- return;
- }
- if (registry.history.length < 2) return;
-
- var ids = new Array();
- $.each(registry.getBlockIds(), function(index, id)
- {
- if (registry.block_enables[id]) ids.push(id);
- });
-
- var data_set = [['Throughput'].concat(ids)];
- for (var i = Math.max(registry.history.length-10, 1); i < registry.history.length; i++)
- {
- var row = new Array();
- row.push(i.toString());
- for (var j = 0; j < ids.length; j++)
- {
- row.push(gras_extract_throughput_delta(registry.history[i-1], registry.history[i], ids[j])/1e6);
- }
- data_set.push(row);
- }
-
- var chart_data = google.visualization.arrayToDataTable(data_set);
- var options = {
- width:$('#page').width()*0.9,
- height:'250',
- chartArea:{left:0,top:0,right:0,bottom:0,width:"100%",height:"85%"},
- legend: {'position': 'bottom'},
- };
- registry.overall_chart.draw(chart_data, options);
-
-}
diff --git a/python/gras/stats/main.css b/python/gras/stats/main.css
index 84023fe..43ecae1 100644
--- a/python/gras/stats/main.css
+++ b/python/gras/stats/main.css
@@ -10,6 +10,11 @@ color:black;
background-color:white;
}
+#overall_chart_pie table
+{
+float:left;
+}
+
#per_block_charts table
{
float:left;
diff --git a/python/gras/stats/main.html b/python/gras/stats/main.html
index 4032d79..9217847 100644
--- a/python/gras/stats/main.html
+++ b/python/gras/stats/main.html
@@ -46,8 +46,15 @@
</tr>
</table>
</div>
+ <div id="overall_chart_pie">
+ <table>
+ <tr><th>Overhead compare</th></tr>
+ <tr>
+ <td></td>
+ </tr>
+ </table>
+ </div>
<div id="per_block_charts">
-
</div>
</body>
diff --git a/python/gras/stats/main.js b/python/gras/stats/main.js
index 9659024..dc04e73 100644
--- a/python/gras/stats/main.js
+++ b/python/gras/stats/main.js
@@ -16,6 +16,7 @@ var gras_query_stats = function(registry)
{
registry.appendPoint(xml);
gras_update_throughput_chart(registry);
+ gras_update_time_compare_chart(registry);
gras_update_per_block_charts(registry);
}
@@ -37,6 +38,7 @@ var gras_stats_main = function()
var overall_config = $('#overall_config').get(0);
gras_setup_overall_chart(registry);
+ gras_setup_overall_chart_pie(registry);
//init overall config gui element for rate
var overall_rate = $('input[name="rate"]', overall_config);
diff --git a/python/gras/stats/utils.js b/python/gras/stats/utils.js
index de123ff..cb7cbf2 100644
--- a/python/gras/stats/utils.js
+++ b/python/gras/stats/utils.js
@@ -37,11 +37,24 @@ var gras_extract_throughput = function(point, id)
var gras_extract_percent_times = function(point, id)
{
var block_data = $('block[id="' + id + '"]', point);
- return {
+ var data = {
prep: parseInt($('total_time_prep', block_data).text()),
work: parseInt($('total_time_work', block_data).text()),
post: parseInt($('total_time_post', block_data).text()),
input: parseInt($('total_time_input', block_data).text()),
output: parseInt($('total_time_output', block_data).text()),
};
+ var total = 0;
+ $.each(data, function(key, val)
+ {
+ total += val;
+ });
+ data['total'] = total;
+ return data;
+}
+
+var gras_animate_show_hide = function(elem, show)
+{
+ if (show) elem.slideDown("fast");
+ else elem.slideUp("fast");
}