Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions rclcpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ find_package(ament_cmake_ros REQUIRED)
find_package(ament_cmake_ros_core REQUIRED)
find_package(ament_index_cpp REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(libstatistics_collector REQUIRED)
find_package(rcl REQUIRED)
find_package(rcl_interfaces REQUIRED)
find_package(rcl_logging_interface REQUIRED)
Expand All @@ -22,7 +21,6 @@ find_package(rosidl_runtime_c REQUIRED)
find_package(rosidl_runtime_cpp REQUIRED)
find_package(rosidl_typesupport_c REQUIRED)
find_package(rosidl_typesupport_cpp REQUIRED)
find_package(statistics_msgs REQUIRED)
find_package(tracetools REQUIRED)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
Expand Down Expand Up @@ -200,7 +198,6 @@ target_include_directories(${PROJECT_NAME} PUBLIC
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>")
target_link_libraries(${PROJECT_NAME} PUBLIC
builtin_interfaces::builtin_interfaces
libstatistics_collector::libstatistics_collector
rcl::rcl
rcl_interfaces::rcl_interfaces
rcl_yaml_param_parser::rcl_yaml_param_parser
Expand All @@ -212,7 +209,6 @@ target_link_libraries(${PROJECT_NAME} PUBLIC
rosidl_runtime_c::rosidl_runtime_c
rosidl_runtime_cpp::rosidl_runtime_cpp
rosidl_typesupport_cpp::rosidl_typesupport_cpp
statistics_msgs::statistics_msgs
tracetools::tracetools
${CMAKE_THREAD_LIBS_INIT}
# Note we link public on purpose, as we want to export
Expand Down Expand Up @@ -246,7 +242,6 @@ ament_export_targets(${PROJECT_NAME})

ament_export_dependencies(
builtin_interfaces
libstatistics_collector
rcl
rcl_interfaces
rcl_yaml_param_parser
Expand All @@ -258,7 +253,6 @@ ament_export_dependencies(
rosidl_runtime_c
rosidl_runtime_cpp
rosidl_typesupport_cpp
statistics_msgs
tracetools
)

Expand Down
6 changes: 0 additions & 6 deletions rclcpp/QUALITY_DECLARATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,6 @@ It is **Quality Level 1**, see its [Quality Declaration document](https://github

It is **Quality Level 1**, see its [Quality Declaration document](https://github.com/ros2/rmw/blob/rolling/rmw/QUALITY_DECLARATION.md).

#### `statistics_msgs`

The `statistics_msgs` package contains ROS 2 message definitions for reporting statistics for topics and system resources.

It is **Quality Level 1**, see its [Quality Declaration document](https://github.com/ros2/rcl_interfaces/blob/rolling/statistics_msgs/QUALITY_DECLARATION.md).

#### `tracetools`

The `tracetools` package provides utilities for instrumenting the code in `rclcpp` so that it may be traced for debugging and performance analysis.
Expand Down
62 changes: 4 additions & 58 deletions rclcpp/include/rclcpp/create_subscription.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,14 @@
#include <string>
#include <utility>

#include "rclcpp/detail/resolve_enable_topic_statistics.hpp"

#include "rclcpp/node_interfaces/get_node_timers_interface.hpp"
#include "rclcpp/detail/qos_parameters.hpp"
#include "rclcpp/node_interfaces/get_node_topics_interface.hpp"
#include "rclcpp/node_interfaces/node_timers_interface.hpp"
#include "rclcpp/node_interfaces/node_parameters_interface.hpp"
#include "rclcpp/node_interfaces/node_topics_interface.hpp"

#include "rclcpp/create_publisher.hpp"
#include "rclcpp/qos.hpp"
#include "rclcpp/subscription_factory.hpp"
#include "rclcpp/subscription_options.hpp"
#include "rclcpp/timer.hpp"
#include "rclcpp/topic_statistics/subscription_topic_statistics.hpp"
#include "rmw/qos_profiles.h"

namespace rclcpp
Expand Down Expand Up @@ -69,59 +64,11 @@ create_subscription(
using rclcpp::node_interfaces::get_node_topics_interface;
auto node_topics_interface = get_node_topics_interface(node_topics);

std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics>
subscription_topic_stats = nullptr;

if (rclcpp::detail::resolve_enable_topic_statistics(
options,
*node_topics_interface->get_node_base_interface()))
{
if (options.topic_stats_options.publish_period <= std::chrono::milliseconds(0)) {
throw std::invalid_argument(
"topic_stats_options.publish_period must be greater than 0, specified value of " +
std::to_string(options.topic_stats_options.publish_period.count()) + " ms");
}

std::shared_ptr<Publisher<statistics_msgs::msg::MetricsMessage>>
publisher = rclcpp::detail::create_publisher<statistics_msgs::msg::MetricsMessage>(
node_parameters,
node_topics_interface,
options.topic_stats_options.publish_topic,
options.topic_stats_options.qos);

subscription_topic_stats =
std::make_shared<rclcpp::topic_statistics::SubscriptionTopicStatistics>(
node_topics_interface->get_node_base_interface()->get_name(), publisher);

std::weak_ptr<
rclcpp::topic_statistics::SubscriptionTopicStatistics
> weak_subscription_topic_stats(subscription_topic_stats);
auto sub_call_back = [weak_subscription_topic_stats]() {
auto subscription_topic_stats = weak_subscription_topic_stats.lock();
if (subscription_topic_stats) {
subscription_topic_stats->publish_message_and_reset_measurements();
}
};

auto node_timer_interface = node_topics_interface->get_node_timers_interface();

auto timer = create_wall_timer(
std::chrono::duration_cast<std::chrono::nanoseconds>(
options.topic_stats_options.publish_period),
sub_call_back,
options.callback_group,
node_topics_interface->get_node_base_interface(),
node_timer_interface
);

subscription_topic_stats->set_publisher_timer(timer);
}

auto factory = rclcpp::create_subscription_factory<MessageT>(
std::forward<CallbackT>(callback),
options,
msg_mem_strat,
subscription_topic_stats
options.subscription_statistics_monitor
);

const rclcpp::QoS & actual_qos = options.qos_overriding_options.get_policy_kinds().size() ?
Expand Down Expand Up @@ -161,8 +108,7 @@ create_subscription(
* \param options
* \param msg_mem_strat
* \return the created subscription
* \throws std::invalid_argument if topic statistics is enabled and the publish period is
* less than or equal to zero.
* \throws std::invalid_argument if the QoS is incompatible with intra-process.
*/
template<
typename MessageT,
Expand Down
53 changes: 0 additions & 53 deletions rclcpp/include/rclcpp/detail/resolve_enable_topic_statistics.hpp

This file was deleted.

19 changes: 10 additions & 9 deletions rclcpp/include/rclcpp/experimental/subscription_intra_process.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
#include <rmw/types.h>

#include <chrono>
#include <functional>
#include <memory>
#include <stdexcept>
#include <string>
Expand All @@ -33,7 +32,7 @@
#include "rclcpp/experimental/subscription_intra_process_buffer.hpp"
#include "rclcpp/logging.hpp"
#include "rclcpp/qos.hpp"
#include "rclcpp/time.hpp"
#include "rclcpp/subscription_statistics_monitor.hpp"
#include "rclcpp/type_support_decl.hpp"
#include "tracetools/tracetools.h"

Expand Down Expand Up @@ -74,7 +73,8 @@ class SubscriptionIntraProcess
using ConstMessageSharedPtr = typename SubscriptionIntraProcessBufferT::ConstDataSharedPtr;
using MessageUniquePtr = typename SubscriptionIntraProcessBufferT::SubscribedTypeUniquePtr;
using BufferUniquePtr = typename SubscriptionIntraProcessBufferT::BufferUniquePtr;
using StatsHandlerFn = std::function<void(const rmw_message_info_t &, const rclcpp::Time &)>;
using SubscriptionStatisticsMonitorSharedPtr =
rclcpp::SubscriptionStatisticsMonitor::SharedPtr;

SubscriptionIntraProcess(
AnySubscriptionCallback<MessageT, Alloc> callback,
Expand All @@ -83,7 +83,7 @@ class SubscriptionIntraProcess
const std::string & topic_name,
const rclcpp::QoS & qos_profile,
rclcpp::IntraProcessBufferType buffer_type,
StatsHandlerFn stats_handler = nullptr)
SubscriptionStatisticsMonitorSharedPtr monitor = nullptr)
: SubscriptionIntraProcessBuffer<SubscribedType, SubscribedTypeAlloc,
SubscribedTypeDeleter, ROSMessageType>(
std::make_shared<SubscribedTypeAlloc>(*allocator),
Expand All @@ -92,7 +92,7 @@ class SubscriptionIntraProcess
qos_profile,
buffer_type),
any_callback_(callback),
stats_handler_(std::move(stats_handler))
monitor_(std::move(monitor))
{
TRACETOOLS_TRACEPOINT(
rclcpp_subscription_callback_added,
Expand Down Expand Up @@ -206,14 +206,15 @@ class SubscriptionIntraProcess

const auto nanos = std::chrono::time_point_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now());
if (stats_handler_) {
if (monitor_) {
RCLCPP_WARN_ONCE(
rclcpp::get_logger("rclcpp"),
"Intra-process communication does not support accurate message age statistics");
// Set source_timestamp to "now" so that message_age reports 0ms rather than
// an invalid value taken from an un-initialised timestamp. IPC delivery
// has little/no transport latency by definition, so near-zero age is expected.
msg_info.source_timestamp = nanos.time_since_epoch().count();
monitor_->before_message_dispatch(msg_info);
}

auto shared_ptr = std::static_pointer_cast<std::pair<ConstMessageSharedPtr, MessageUniquePtr>>(
Expand All @@ -228,13 +229,13 @@ class SubscriptionIntraProcess
}
shared_ptr.reset();

if (stats_handler_) {
stats_handler_(msg_info, rclcpp::Time(nanos.time_since_epoch().count()));
if (monitor_) {
monitor_->after_message_dispatch(msg_info);
}
}

AnySubscriptionCallback<MessageT, Alloc> any_callback_;
StatsHandlerFn stats_handler_;
SubscriptionStatisticsMonitorSharedPtr monitor_;
};

} // namespace experimental
Expand Down
1 change: 0 additions & 1 deletion rclcpp/include/rclcpp/node_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@
#include "rclcpp/create_generic_service.hpp"
#include "rclcpp/create_subscription.hpp"
#include "rclcpp/create_timer.hpp"
#include "rclcpp/detail/resolve_enable_topic_statistics.hpp"
#include "rclcpp/parameter.hpp"
#include "rclcpp/qos.hpp"
#include "rclcpp/timer.hpp"
Expand Down
5 changes: 0 additions & 5 deletions rclcpp/include/rclcpp/node_interfaces/node_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ class NodeBase : public NodeBaseInterface, public std::enable_shared_from_this<N
rclcpp::Context::SharedPtr context,
const rcl_node_options_t & rcl_node_options,
bool use_intra_process_default,
bool enable_topic_statistics_default,
rclcpp::CallbackGroup::SharedPtr default_callback_group = nullptr);

RCLCPP_PUBLIC
Expand Down Expand Up @@ -133,9 +132,6 @@ class NodeBase : public NodeBaseInterface, public std::enable_shared_from_this<N
bool
get_use_intra_process_default() const override;

bool
get_enable_topic_statistics_default() const override;

std::string
resolve_topic_or_service_name(
const std::string & name, bool is_service, bool only_expand = false) const override;
Expand All @@ -145,7 +141,6 @@ class NodeBase : public NodeBaseInterface, public std::enable_shared_from_this<N

rclcpp::Context::SharedPtr context_;
bool use_intra_process_default_;
bool enable_topic_statistics_default_;

std::shared_ptr<rcl_node_t> node_handle_;

Expand Down
6 changes: 0 additions & 6 deletions rclcpp/include/rclcpp/node_interfaces/node_base_interface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,6 @@ class NodeBaseInterface
bool
get_use_intra_process_default() const = 0;

/// Return the default preference for enabling topic statistics collection.
RCLCPP_PUBLIC
virtual
bool
get_enable_topic_statistics_default() const = 0;

/// Expand and remap a given topic or service name.
RCLCPP_PUBLIC
virtual
Expand Down
20 changes: 0 additions & 20 deletions rclcpp/include/rclcpp/node_options.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ class NodeOptions
* - use_global_arguments = true
* - enable_rosout = true
* - use_intra_process_comms = false
* - enable_topic_statistics = false
* - start_parameter_services = true
* - start_parameter_event_publisher = true
* - clock_type = RCL_ROS_TIME
Expand Down Expand Up @@ -208,23 +207,6 @@ class NodeOptions
NodeOptions &
use_intra_process_comms(bool use_intra_process_comms);

/// Return the enable_topic_statistics flag.
RCLCPP_PUBLIC
bool
enable_topic_statistics() const;

/// Set the enable_topic_statistics flag, return this for parameter idiom.
/**
* If true, topic statistics collection and publication will be enabled
* for all subscriptions.
* This can be used to override the global topic statistics setting.
*
* Defaults to false.
*/
RCLCPP_PUBLIC
NodeOptions &
enable_topic_statistics(bool enable_topic_statistics);

/// Return the start_parameter_services flag.
RCLCPP_PUBLIC
bool
Expand Down Expand Up @@ -455,8 +437,6 @@ class NodeOptions

bool use_intra_process_comms_ {false};

bool enable_topic_statistics_ {false};

bool start_parameter_services_ {true};

bool start_parameter_event_publisher_ {true};
Expand Down
Loading