diff options
author | Marcus Müller <mueller@kit.edu> | 2018-02-20 11:22:14 +0100 |
---|---|---|
committer | Marcus Müller <marcus@hostalia.de> | 2018-02-23 19:06:50 +0100 |
commit | 97f0d1cecf4a8cb82e8e16e4dfcac0589c5b56c7 (patch) | |
tree | e0ad2aba49c4ebcb8a8bbf9f6b65bc8a953c95e0 | |
parent | 2fc414578985b59c5bfbb15103f3c3677a1c6fdc (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.cc | 7 | ||||
-rw-r--r-- | gr-blocks/lib/message_strobe_impl.h | 1 | ||||
-rw-r--r-- | gr-blocks/lib/message_strobe_random_impl.cc | 8 | ||||
-rw-r--r-- | gr-blocks/lib/message_strobe_random_impl.h | 2 | ||||
-rw-r--r-- | gr-blocks/lib/pdu_filter_impl.cc | 8 | ||||
-rw-r--r-- | gr-blocks/lib/pdu_remove_impl.cc | 8 | ||||
-rw-r--r-- | gr-blocks/lib/pdu_set_impl.cc | 10 | ||||
-rw-r--r-- | gr-blocks/lib/probe_rate_impl.cc | 13 | ||||
-rw-r--r-- | gr-blocks/lib/probe_rate_impl.h | 3 | ||||
-rw-r--r-- | gr-digital/lib/header_payload_demux_impl.cc | 8 | ||||
-rw-r--r-- | gr-digital/lib/header_payload_demux_impl.h | 2 |
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 |