summaryrefslogtreecommitdiff
path: root/gnuradio-runtime
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2013-09-06 13:25:43 -0400
committerTom Rondeau <tom@trondeau.com>2013-09-06 13:25:43 -0400
commite24e6d149ae6395c93d8c0df4d806e05971fc281 (patch)
tree41d5756a440cf35f0a1f8b2a30dbd434b8bd9faf /gnuradio-runtime
parent08ea1feffdd64cc492c68adcd7dab89166481dba (diff)
runtime: Added a Performance Counter that stores the accumulated work_time counter (work_time_total).
Diffstat (limited to 'gnuradio-runtime')
-rw-r--r--gnuradio-runtime/include/gnuradio/block.h5
-rw-r--r--gnuradio-runtime/include/gnuradio/block_detail.h3
-rw-r--r--gnuradio-runtime/lib/block.cc18
-rw-r--r--gnuradio-runtime/lib/block_detail.cc8
-rw-r--r--gnuradio-runtime/swig/block.i1
5 files changed, 35 insertions, 0 deletions
diff --git a/gnuradio-runtime/include/gnuradio/block.h b/gnuradio-runtime/include/gnuradio/block.h
index b8cbcfc552..5cd5dbb4a4 100644
--- a/gnuradio-runtime/include/gnuradio/block.h
+++ b/gnuradio-runtime/include/gnuradio/block.h
@@ -461,6 +461,11 @@ namespace gr {
float pc_work_time_var();
/*!
+ * \brief Gets total clock cycles spent in work.
+ */
+ float pc_work_time_total();
+
+ /*!
* \brief Resets the performance counters
*/
void reset_perf_counters();
diff --git a/gnuradio-runtime/include/gnuradio/block_detail.h b/gnuradio-runtime/include/gnuradio/block_detail.h
index b7531baf6d..b336cb86f7 100644
--- a/gnuradio-runtime/include/gnuradio/block_detail.h
+++ b/gnuradio-runtime/include/gnuradio/block_detail.h
@@ -227,6 +227,8 @@ namespace gr {
float pc_output_buffers_full_var(size_t which);
std::vector<float> pc_output_buffers_full_var();
float pc_work_time_var();
+
+ float pc_work_time_total();
tpb_detail d_tpb; // used by thread-per-block scheduler
int d_produce_or;
@@ -257,6 +259,7 @@ namespace gr {
float d_ins_work_time;
float d_avg_work_time;
float d_var_work_time;
+ float d_total_work_time;
float d_pc_counter;
block_detail(unsigned int ninputs, unsigned int noutputs);
diff --git a/gnuradio-runtime/lib/block.cc b/gnuradio-runtime/lib/block.cc
index 7a55e09561..e76daefe48 100644
--- a/gnuradio-runtime/lib/block.cc
+++ b/gnuradio-runtime/lib/block.cc
@@ -635,6 +635,17 @@ namespace gr {
}
}
+ float
+ block::pc_work_time_total()
+ {
+ if(d_detail) {
+ return d_detail->pc_work_time_total();
+ }
+ else {
+ return 0;
+ }
+ }
+
void
block::reset_perf_counters()
{
@@ -712,6 +723,13 @@ namespace gr {
DISPTIME | DISPOPTSTRIP)));
d_rpc_vars.push_back(
+ rpcbasic_sptr(new rpcbasic_register_get<block, float>(
+ alias(), "total work time", &block::pc_work_time_total,
+ pmt::mp(0), pmt::mp(1e9), pmt::mp(0),
+ "", "Total clock cycles in calls to work", RPC_PRIVLVL_MIN,
+ DISPTIME | DISPOPTSTRIP)));
+
+ d_rpc_vars.push_back(
rpcbasic_sptr(new rpcbasic_register_get<block, std::vector<float> >(
alias(), "input \% full", &block::pc_input_buffers_full,
pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0),
diff --git a/gnuradio-runtime/lib/block_detail.cc b/gnuradio-runtime/lib/block_detail.cc
index fd1240ae56..1020916ec2 100644
--- a/gnuradio-runtime/lib/block_detail.cc
+++ b/gnuradio-runtime/lib/block_detail.cc
@@ -272,6 +272,7 @@ namespace gr {
d_ins_work_time = diff;
d_avg_work_time = diff;
d_var_work_time = 0;
+ d_total_work_time = diff;
d_ins_nproduced = nproduced;
d_avg_nproduced = nproduced;
d_var_nproduced = 0;
@@ -300,6 +301,7 @@ namespace gr {
d_ins_work_time = diff;
d_avg_work_time = d_avg_work_time + d/d_pc_counter;
d_var_work_time = d_var_work_time + d*d;
+ d_total_work_time += diff;
d = nproduced - d_avg_nproduced;
d_ins_nproduced = nproduced;
@@ -493,4 +495,10 @@ namespace gr {
return d_var_work_time/(d_pc_counter-1);
}
+ float
+ block_detail::pc_work_time_total()
+ {
+ return d_total_work_time;
+ }
+
} /* namespace gr */
diff --git a/gnuradio-runtime/swig/block.i b/gnuradio-runtime/swig/block.i
index 7b7ac8ee43..1f9b70ce0c 100644
--- a/gnuradio-runtime/swig/block.i
+++ b/gnuradio-runtime/swig/block.i
@@ -89,6 +89,7 @@ class gr::block : public gr::basic_block
float pc_work_time();
float pc_work_time_avg();
float pc_work_time_var();
+ float pc_work_time_total();
// Methods to manage processor affinity.
void set_processor_affinity(const std::vector<int> &mask);