summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Müller <mueller@kit.edu>2018-02-20 11:22:14 +0100
committerMarcus Müller <marcus@hostalia.de>2018-02-23 19:06:50 +0100
commit97f0d1cecf4a8cb82e8e16e4dfcac0589c5b56c7 (patch)
treee0ad2aba49c4ebcb8a8bbf9f6b65bc8a953c95e0
parent2fc414578985b59c5bfbb15103f3c3677a1c6fdc (diff)
blocks: remove unnecessary call to pmt::intern at runtime
typical usage: message_port_pub(pmt::mp("out_port"), …) which is bad, as it implies hashing of a string, allocation of memory, deallocation, finding the hashed string in the table of interned strings and returning a unique pointer (which for reasons of PMT awesomeness isn't even unique) to the interned port name. Replacing all these port name ad hoc ::mp() calls by reusing one, private, port name member.
-rw-r--r--gr-blocks/lib/message_strobe_impl.cc7
-rw-r--r--gr-blocks/lib/message_strobe_impl.h1
-rw-r--r--gr-blocks/lib/message_strobe_random_impl.cc8
-rw-r--r--gr-blocks/lib/message_strobe_random_impl.h2
-rw-r--r--gr-blocks/lib/pdu_filter_impl.cc8
-rw-r--r--gr-blocks/lib/pdu_remove_impl.cc8
-rw-r--r--gr-blocks/lib/pdu_set_impl.cc10
-rw-r--r--gr-blocks/lib/probe_rate_impl.cc13
-rw-r--r--gr-blocks/lib/probe_rate_impl.h3
-rw-r--r--gr-digital/lib/header_payload_demux_impl.cc8
-rw-r--r--gr-digital/lib/header_payload_demux_impl.h2
11 files changed, 42 insertions, 28 deletions
diff --git a/gr-blocks/lib/message_strobe_impl.cc b/gr-blocks/lib/message_strobe_impl.cc
index 96b079a0ed..059584e636 100644
--- a/gr-blocks/lib/message_strobe_impl.cc
+++ b/gr-blocks/lib/message_strobe_impl.cc
@@ -51,9 +51,10 @@ namespace gr {
io_signature::make(0, 0, 0)),
d_finished(false),
d_period_ms(period_ms),
- d_msg(msg)
+ d_msg(msg),
+ d_port(pmt::mp("strobe"))
{
- message_port_register_out(pmt::mp("strobe"));
+ message_port_register_out(d_port);
message_port_register_in(pmt::mp("set_msg"));
set_msg_handler(pmt::mp("set_msg"),
@@ -95,7 +96,7 @@ namespace gr {
return;
}
- message_port_pub(pmt::mp("strobe"), d_msg);
+ message_port_pub(d_port, d_msg);
}
}
diff --git a/gr-blocks/lib/message_strobe_impl.h b/gr-blocks/lib/message_strobe_impl.h
index 3ce71af58f..0ae27817b7 100644
--- a/gr-blocks/lib/message_strobe_impl.h
+++ b/gr-blocks/lib/message_strobe_impl.h
@@ -35,6 +35,7 @@ namespace gr {
bool d_finished;
float d_period_ms;
pmt::pmt_t d_msg;
+ const pmt::pmt_t d_port;
void run();
diff --git a/gr-blocks/lib/message_strobe_random_impl.cc b/gr-blocks/lib/message_strobe_random_impl.cc
index c62aad1c7a..ab9422717c 100644
--- a/gr-blocks/lib/message_strobe_random_impl.cc
+++ b/gr-blocks/lib/message_strobe_random_impl.cc
@@ -45,6 +45,7 @@ namespace gr {
(new message_strobe_random_impl(msg, dist, mean_ms, std_ms));
}
+
message_strobe_random_impl::message_strobe_random_impl(pmt::pmt_t msg, message_strobe_random_distribution_t dist, float mean_ms, float std_ms)
: block("message_strobe_random",
io_signature::make(0, 0, 0),
@@ -54,13 +55,14 @@ namespace gr {
d_std_ms(std_ms),
d_dist(dist),
d_msg(msg),
- d_rng()
+ d_rng(),
+ d_port(pmt::mp("strobe"))
{
// allocate RNGs
update_dist();
// set up ports
- message_port_register_out(pmt::mp("strobe"));
+ message_port_register_out(d_port);
d_thread = boost::shared_ptr<gr::thread::thread>
(new gr::thread::thread(boost::bind(&message_strobe_random_impl::run, this)));
@@ -113,7 +115,7 @@ namespace gr {
return;
}
- message_port_pub(pmt::mp("strobe"), d_msg);
+ message_port_pub(d_port, d_msg);
}
}
diff --git a/gr-blocks/lib/message_strobe_random_impl.h b/gr-blocks/lib/message_strobe_random_impl.h
index 2dcaa7effa..67e0e490c1 100644
--- a/gr-blocks/lib/message_strobe_random_impl.h
+++ b/gr-blocks/lib/message_strobe_random_impl.h
@@ -50,6 +50,8 @@ namespace gr {
boost::shared_ptr< boost::variate_generator <boost::mt19937, boost::normal_distribution<> > > d_variate_normal;
boost::shared_ptr< boost::variate_generator <boost::mt19937, boost::uniform_real<> > > d_variate_uniform;
+ const pmt::pmt_t d_port;
+
void update_dist();
public:
diff --git a/gr-blocks/lib/pdu_filter_impl.cc b/gr-blocks/lib/pdu_filter_impl.cc
index 507238d212..17879d4b5a 100644
--- a/gr-blocks/lib/pdu_filter_impl.cc
+++ b/gr-blocks/lib/pdu_filter_impl.cc
@@ -43,9 +43,9 @@ namespace gr {
io_signature::make (0, 0, 0)),
d_k(k), d_v(v), d_invert(invert)
{
- message_port_register_out(pmt::mp("pdus"));
- message_port_register_in(pmt::mp("pdus"));
- set_msg_handler(pmt::mp("pdus"), boost::bind(&pdu_filter_impl::handle_msg, this, _1));
+ message_port_register_out(pdu::s_pdu_port_id);
+ message_port_register_in(pdu::s_pdu_port_id);
+ set_msg_handler(pdu::s_pdu_port_id, boost::bind(&pdu_filter_impl::handle_msg, this, _1));
}
void
@@ -63,7 +63,7 @@ namespace gr {
// if all tests pass, propagate the pdu
if(output){
- message_port_pub(pmt::mp("pdus"), pdu);
+ message_port_pub(pdu::s_pdu_port_id, pdu);
}
}
diff --git a/gr-blocks/lib/pdu_remove_impl.cc b/gr-blocks/lib/pdu_remove_impl.cc
index c3a87ed69e..afa853c06b 100644
--- a/gr-blocks/lib/pdu_remove_impl.cc
+++ b/gr-blocks/lib/pdu_remove_impl.cc
@@ -43,9 +43,9 @@ namespace gr {
io_signature::make (0, 0, 0)),
d_k(k)
{
- message_port_register_out(pmt::mp("pdus"));
- message_port_register_in(pmt::mp("pdus"));
- set_msg_handler(pmt::mp("pdus"), boost::bind(&pdu_remove_impl::handle_msg, this, _1));
+ message_port_register_out(pdu::s_pdu_port_id);
+ message_port_register_in(pdu::s_pdu_port_id);
+ set_msg_handler(pdu::s_pdu_port_id, boost::bind(&pdu_remove_impl::handle_msg, this, _1));
}
void
@@ -59,7 +59,7 @@ namespace gr {
throw std::runtime_error("pdu_remove received non PDU input");
}
meta = pmt::dict_delete(meta, d_k);
- message_port_pub(pmt::mp("pdus"), pmt::cons(meta, pmt::cdr(pdu)));
+ message_port_pub(pdu::s_pdu_port_id, pmt::cons(meta, pmt::cdr(pdu)));
}
} /* namespace blocks */
diff --git a/gr-blocks/lib/pdu_set_impl.cc b/gr-blocks/lib/pdu_set_impl.cc
index dce4df09a3..cbac65a766 100644
--- a/gr-blocks/lib/pdu_set_impl.cc
+++ b/gr-blocks/lib/pdu_set_impl.cc
@@ -41,11 +41,11 @@ namespace gr {
: block("pdu_set",
io_signature::make (0, 0, 0),
io_signature::make (0, 0, 0)),
- d_k(k), d_v(v)
+ d_k(k), d_v(v)
{
- message_port_register_out(pmt::mp("pdus"));
- message_port_register_in(pmt::mp("pdus"));
- set_msg_handler(pmt::mp("pdus"), boost::bind(&pdu_set_impl::handle_msg, this, _1));
+ message_port_register_out(pdu::s_pdu_port_id);
+ message_port_register_in(pdu::s_pdu_port_id);
+ set_msg_handler(pdu::s_pdu_port_id, boost::bind(&pdu_set_impl::handle_msg, this, _1));
}
void
@@ -59,7 +59,7 @@ namespace gr {
throw std::runtime_error("pdu_set received non PDU input");
}
meta = pmt::dict_add(meta, d_k, d_v);
- message_port_pub(pmt::mp("pdus"), pmt::cons(meta, pmt::cdr(pdu)));
+ message_port_pub(pdu::s_pdu_port_id, pmt::cons(meta, pmt::cdr(pdu)));
}
} /* namespace blocks */
diff --git a/gr-blocks/lib/probe_rate_impl.cc b/gr-blocks/lib/probe_rate_impl.cc
index 015b157d39..898c20c515 100644
--- a/gr-blocks/lib/probe_rate_impl.cc
+++ b/gr-blocks/lib/probe_rate_impl.cc
@@ -46,9 +46,12 @@ namespace gr {
d_avg(0),
d_min_update_time(update_rate_ms),
d_lastthru(0),
- d_itemsize(itemsize)
+ d_itemsize(itemsize),
+ d_port(pmt::mp("rate")),
+ d_dict_avg(pmt::mp("rate_avg")),
+ d_dict_now(pmt::mp("rate_now"))
{
- message_port_register_out(pmt::mp("rate"));
+ message_port_register_out(d_port);
}
probe_rate_impl::~probe_rate_impl(){}
@@ -70,9 +73,9 @@ namespace gr {
d_avg = rate_this_update*d_alpha + d_avg*d_beta;
}
pmt::pmt_t d = pmt::make_dict();
- d = pmt::dict_add(d, pmt::mp("rate_avg"), pmt::mp(d_avg));
- d = pmt::dict_add(d, pmt::mp("rate_now"), pmt::mp(rate_this_update));
- message_port_pub(pmt::mp("rate"), pmt::cons(d, pmt::PMT_NIL));
+ d = pmt::dict_add(d, d_dict_avg, pmt::mp(d_avg));
+ d = pmt::dict_add(d, d_dict_now, pmt::mp(rate_this_update));
+ message_port_pub(d_port, pmt::cons(d, pmt::PMT_NIL));
}
return noutput_items;
}
diff --git a/gr-blocks/lib/probe_rate_impl.h b/gr-blocks/lib/probe_rate_impl.h
index a1c69ba189..4153b336ae 100644
--- a/gr-blocks/lib/probe_rate_impl.h
+++ b/gr-blocks/lib/probe_rate_impl.h
@@ -38,6 +38,9 @@ namespace gr {
size_t d_itemsize;
void setup_rpc();
+ const pmt::pmt_t d_port;
+ const pmt::pmt_t d_dict_avg, d_dict_now;
+
public:
probe_rate_impl(size_t itemsize, double update_rate_ms, double alpha = 0.0001);
~probe_rate_impl();
diff --git a/gr-digital/lib/header_payload_demux_impl.cc b/gr-digital/lib/header_payload_demux_impl.cc
index be9e2bf591..646902d506 100644
--- a/gr-digital/lib/header_payload_demux_impl.cc
+++ b/gr-digital/lib/header_payload_demux_impl.cc
@@ -31,6 +31,8 @@
namespace gr {
namespace digital {
+ const pmt::pmt_t header_payload_demux_impl::s_msg_port_id = pmt::mp("header_data");
+
//! Returns a PMT time tuple (uint seconds, double fraction) as the sum of
// another PMT time tuple and a time diff in seconds.
pmt::pmt_t _update_pmt_time(
@@ -60,8 +62,6 @@ namespace gr {
PORT_TRIGGER = 1
};
-#define msg_port_id pmt::mp("header_data")
-
header_payload_demux::sptr
header_payload_demux::make(
int header_len,
@@ -149,8 +149,8 @@ namespace gr {
);
}
set_tag_propagation_policy(TPP_DONT);
- message_port_register_in(msg_port_id);
- set_msg_handler(msg_port_id, boost::bind(&header_payload_demux_impl::parse_header_data_msg, this, _1));
+ message_port_register_in(s_msg_port_id);
+ set_msg_handler(s_msg_port_id, boost::bind(&header_payload_demux_impl::parse_header_data_msg, this, _1));
for (size_t i = 0; i < special_tags.size(); i++) {
d_special_tags.push_back(pmt::string_to_symbol(special_tags[i]));
d_special_tags_last_value.push_back(pmt::PMT_NIL);
diff --git a/gr-digital/lib/header_payload_demux_impl.h b/gr-digital/lib/header_payload_demux_impl.h
index 0a70e7da3e..dfadfd58e6 100644
--- a/gr-digital/lib/header_payload_demux_impl.h
+++ b/gr-digital/lib/header_payload_demux_impl.h
@@ -55,6 +55,8 @@ namespace gr {
std::vector<pmt::pmt_t> d_special_tags; //!< List of special tags
std::vector<pmt::pmt_t> d_special_tags_last_value; //!< The current value of the special tags
+ static const pmt::pmt_t s_msg_port_id; //!< Message Port Id
+
// Helper functions to make the state machine more readable
//! Checks if there are enough items on the inputs and enough space on the output buffers to copy \p n_symbols symbols