diff options
author | Martin Braun <martin.braun@ettus.com> | 2019-06-01 12:29:38 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-11-26 11:49:12 -0800 |
commit | 4bbbedbb7ea3fd8179e7f021fd9471eddd394f35 (patch) | |
tree | fcfc87c04bedfccdf16a7d0f64dcbb6a8d7f64b0 | |
parent | 56f21097483da8aa5d8787a75a1b22a0c4c41313 (diff) | |
download | uhd-4bbbedbb7ea3fd8179e7f021fd9471eddd394f35.tar.gz uhd-4bbbedbb7ea3fd8179e7f021fd9471eddd394f35.tar.bz2 uhd-4bbbedbb7ea3fd8179e7f021fd9471eddd394f35.zip |
lib: Replace uhd::get_system_time() with steady_clock
Benchmarks show that using C++ chrono features beats
uhd::get_system_time(), and the latter is simply not appropriate unless
a uhd::time_spec_t is required.
-rw-r--r-- | host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp | 16 | ||||
-rw-r--r-- | host/lib/include/uhdlib/utils/atomic.hpp | 7 |
2 files changed, 14 insertions, 9 deletions
diff --git a/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp b/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp index 3a17b864e..54ae10908 100644 --- a/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp +++ b/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp @@ -8,7 +8,6 @@ #ifndef INCLUDED_LIBUHD_USRP_COMMON_RECV_PACKET_DEMUXER_3000_HPP #define INCLUDED_LIBUHD_USRP_COMMON_RECV_PACKET_DEMUXER_3000_HPP -#include <uhdlib/utils/system_time.hpp> #include <uhd/config.hpp> #include <uhd/transport/zero_copy.hpp> #include <uhd/utils/log.hpp> @@ -18,6 +17,7 @@ #include <boost/enable_shared_from_this.hpp> #include <queue> #include <map> +#include <chrono> #include <stdint.h> namespace uhd{ namespace usrp{ @@ -36,15 +36,19 @@ namespace uhd{ namespace usrp{ transport::managed_recv_buffer::sptr get_recv_buff(const uint32_t sid, const double timeout) { - const time_spec_t exit_time = - time_spec_t(timeout) + uhd::get_system_time(); + const auto exit_time = std::chrono::high_resolution_clock::now() + + std::chrono::microseconds(int64_t(timeout * 1e6)); transport::managed_recv_buffer::sptr buff; buff = _internal_get_recv_buff(sid, timeout); while (not buff) //loop until timeout { - const time_spec_t delta = exit_time - uhd::get_system_time(); - const double new_timeout = delta.get_real_secs(); - if (new_timeout < 0.0) break; + const auto delta = exit_time - std::chrono::high_resolution_clock::now(); + const double new_timeout = + std::chrono::duration_cast<std::chrono::duration<double>>(delta) + .count(); + if (new_timeout < 0.0) { + break; + } buff = _internal_get_recv_buff(sid, new_timeout); } return buff; diff --git a/host/lib/include/uhdlib/utils/atomic.hpp b/host/lib/include/uhdlib/utils/atomic.hpp index 5436eea81..303df1bc9 100644 --- a/host/lib/include/uhdlib/utils/atomic.hpp +++ b/host/lib/include/uhdlib/utils/atomic.hpp @@ -10,9 +10,9 @@ #include <uhd/config.hpp> #include <uhd/types/time_spec.hpp> -#include <uhdlib/utils/system_time.hpp> #include <boost/thread/thread.hpp> #include <atomic> +#include <chrono> namespace uhd{ @@ -31,9 +31,10 @@ namespace uhd{ const double timeout ){ if (cond == value) return true; - const time_spec_t exit_time = uhd::get_system_time() + time_spec_t(timeout); + const auto exit_time = std::chrono::high_resolution_clock::now() + + std::chrono::microseconds(int64_t(timeout * 1e6)); while (cond != value) { - if (uhd::get_system_time() > exit_time) { + if (std::chrono::high_resolution_clock::now() > exit_time) { return false; } boost::this_thread::interruption_point(); |