summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/lib
diff options
context:
space:
mode:
authorNathan West <nathan.west@okstate.edu>2014-10-31 19:08:14 -0500
committerNathan West <nathan.west@okstate.edu>2014-10-31 19:08:14 -0500
commitfe9bd1d961986fd55f6eb984939344be18cd7605 (patch)
tree643ed3586970d20264699e93f55d2db3e0503345 /gnuradio-runtime/lib
parent82779dce49e149d9cb5acc4d77937cda59e676bd (diff)
runtime: add throughput counter
throughput_avg is calculated with a wall clock timer over all items produced.
Diffstat (limited to 'gnuradio-runtime/lib')
-rw-r--r--gnuradio-runtime/lib/block.cc10
-rw-r--r--gnuradio-runtime/lib/block_detail.cc13
2 files changed, 23 insertions, 0 deletions
diff --git a/gnuradio-runtime/lib/block.cc b/gnuradio-runtime/lib/block.cc
index a15fb89c85..2cc868e844 100644
--- a/gnuradio-runtime/lib/block.cc
+++ b/gnuradio-runtime/lib/block.cc
@@ -682,6 +682,16 @@ namespace gr {
}
}
+ float
+ block::pc_throughput_avg() {
+ if(d_detail) {
+ return d_detail->pc_throughput_avg();
+ }
+ else {
+ return 0;
+ }
+ }
+
void
block::reset_perf_counters()
{
diff --git a/gnuradio-runtime/lib/block_detail.cc b/gnuradio-runtime/lib/block_detail.cc
index 77c457cf7f..9463e8d13b 100644
--- a/gnuradio-runtime/lib/block_detail.cc
+++ b/gnuradio-runtime/lib/block_detail.cc
@@ -46,6 +46,7 @@ namespace gr {
d_ins_noutput_items(0),
d_avg_noutput_items(0),
d_var_noutput_items(0),
+ d_total_noutput_items(0),
d_ins_nproduced(0),
d_avg_nproduced(0),
d_var_nproduced(0),
@@ -58,9 +59,11 @@ namespace gr {
d_ins_work_time(0),
d_avg_work_time(0),
d_var_work_time(0),
+ d_avg_throughput(0),
d_pc_counter(0)
{
s_ncurrently_allocated++;
+ d_pc_start_time = gr::high_res_timer_now();
}
block_detail::~block_detail()
@@ -279,6 +282,8 @@ namespace gr {
d_ins_noutput_items = noutput_items;
d_avg_noutput_items = noutput_items;
d_var_noutput_items = 0;
+ d_total_noutput_items = noutput_items;
+ d_pc_start_time = (float)gr::high_res_timer_now();
for(size_t i=0; i < d_input.size(); i++) {
gr::thread::scoped_lock guard(*d_input[i]->mutex());
float pfull = static_cast<float>(d_input[i]->items_available()) /
@@ -312,6 +317,10 @@ namespace gr {
d_ins_noutput_items = noutput_items;
d_avg_noutput_items = d_avg_noutput_items + d/d_pc_counter;
d_var_noutput_items = d_var_noutput_items + d*d;
+ d_total_noutput_items += noutput_items;
+ d_pc_last_work_time = gr::high_res_timer_now();
+ float monitor_time = (float)(d_pc_last_work_time - d_pc_start_time) / (float)gr::high_res_timer_tps();
+ d_avg_throughput = d_total_noutput_items / monitor_time;
for(size_t i=0; i < d_input.size(); i++) {
gr::thread::scoped_lock guard(*d_input[i]->mutex());
@@ -501,4 +510,8 @@ namespace gr {
return d_total_work_time;
}
+ float
+ block_detail::pc_throughput_avg() {
+ return d_avg_throughput;
+ }
} /* namespace gr */