Skip to content

Commit 4ba1a8c

Browse files
committed
remove new progress bar class, integrate functionality in PlayerImpl
Signed-off-by: Nicola Loi <[email protected]>
1 parent 2cb732d commit 4ba1a8c

File tree

2 files changed

+65
-105
lines changed

2 files changed

+65
-105
lines changed

rosbag2_transport/include/rosbag2_transport/player_progress_bar.hpp

-88
This file was deleted.

rosbag2_transport/src/rosbag2_transport/player.cpp

+65-17
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
#include "rosbag2_transport/config_options_from_node_params.hpp"
4242
#include "rosbag2_transport/player_service_client.hpp"
4343
#include "rosbag2_transport/reader_writer_factory.hpp"
44-
#include "rosbag2_transport/player_progress_bar.hpp"
4544

4645
#include "logging.hpp"
4746

@@ -299,6 +298,11 @@ class PlayerImpl
299298
void configure_play_until_timestamp();
300299
bool shall_stop_at_timestamp(const rcutils_time_point_value_t & msg_timestamp) const;
301300

301+
void print_status(const char status) const;
302+
void print_running_status() const;
303+
void print_paused_status() const;
304+
void print_delayed_status() const;
305+
302306
static constexpr double read_ahead_lower_bound_percentage_ = 0.9;
303307
static const std::chrono::milliseconds queue_read_wait_period_;
304308
std::atomic_bool cancel_wait_for_next_message_{false};
@@ -329,6 +333,8 @@ class PlayerImpl
329333
std::condition_variable playback_finished_cv_;
330334

331335
rcutils_time_point_value_t starting_time_;
336+
double starting_time_secs_;
337+
double duration_secs_;
332338

333339
// control services
334340
rclcpp::Service<rosbag2_interfaces::srv::Pause>::SharedPtr srv_pause_;
@@ -352,7 +358,7 @@ class PlayerImpl
352358
std::shared_ptr<PlayerServiceClientManager> player_service_client_manager_;
353359

354360
// progress bar
355-
std::unique_ptr<PlayerProgressBar> progress_bar_;
361+
const bool disable_progress_bar_;
356362
};
357363

358364
PlayerImpl::PlayerImpl(
@@ -365,7 +371,8 @@ PlayerImpl::PlayerImpl(
365371
storage_options_(storage_options),
366372
play_options_(play_options),
367373
keyboard_handler_(std::move(keyboard_handler)),
368-
player_service_client_manager_(std::make_shared<PlayerServiceClientManager>())
374+
player_service_client_manager_(std::make_shared<PlayerServiceClientManager>()),
375+
disable_progress_bar_(play_options.disable_progress_bar)
369376
{
370377
for (auto & topic : play_options_.topics_to_filter) {
371378
topic = rclcpp::expand_topic_or_service_name(
@@ -412,19 +419,25 @@ PlayerImpl::PlayerImpl(
412419
starting_time_ += play_options_.start_offset;
413420
bag_duration -= play_options_.start_offset;
414421
}
422+
starting_time_secs_ = RCUTILS_NS_TO_S(static_cast<double>(starting_time_));
423+
duration_secs_ = RCUTILS_NS_TO_S(static_cast<double>(bag_duration));
415424
clock_ = std::make_unique<rosbag2_cpp::TimeControllerClock>(
416425
starting_time_, std::chrono::steady_clock::now,
417426
std::chrono::milliseconds{100}, play_options_.start_paused);
418-
progress_bar_ = std::make_unique<PlayerProgressBar>(play_options_.disable_progress_bar,
419-
starting_time_, bag_duration);
420427
set_rate(play_options_.rate);
421428
topic_qos_profile_overrides_ = play_options_.topic_qos_profile_overrides;
422429
prepare_publishers();
423430
configure_play_until_timestamp();
424431
}
425432
create_control_services();
426433
add_keyboard_callbacks();
427-
RCLCPP_INFO_STREAM(owner_->get_logger(), progress_bar_->get_help_str());
434+
std::string progress_bar_help_str;
435+
if (!disable_progress_bar_) {
436+
progress_bar_help_str = "Bag Time and Duration [?]: ? = R running, P paused, D delayed";
437+
} else {
438+
progress_bar_help_str = "Bag Time and Duration progress bar disabled.";
439+
}
440+
RCLCPP_INFO_STREAM(owner_->get_logger(), progress_bar_help_str);
428441
}
429442

430443
PlayerImpl::~PlayerImpl()
@@ -445,6 +458,11 @@ PlayerImpl::~PlayerImpl()
445458
if (reader_) {
446459
reader_->close();
447460
}
461+
// print new line to keep on screen the latest progress bar
462+
if (!disable_progress_bar_) {
463+
printf("\n");
464+
fflush(stdout);
465+
}
448466
}
449467

450468
const std::chrono::milliseconds
@@ -495,7 +513,7 @@ bool PlayerImpl::play()
495513
do {
496514
if (delay > rclcpp::Duration(0, 0)) {
497515
RCLCPP_INFO_STREAM(owner_->get_logger(), "Sleep " << delay.nanoseconds() << " ns");
498-
progress_bar_->print_delayed_status(clock_->now());
516+
print_delayed_status();
499517
std::chrono::nanoseconds delay_duration(delay.nanoseconds());
500518
std::this_thread::sleep_for(delay_duration);
501519
}
@@ -613,24 +631,24 @@ void PlayerImpl::stop()
613631
}
614632
}
615633
if (clock_->is_paused()) {
616-
progress_bar_->print_paused_status(clock_->now());
634+
print_paused_status();
617635
} else {
618-
progress_bar_->print_running_status(clock_->now());
636+
print_running_status();
619637
}
620638
}
621639

622640
void PlayerImpl::pause()
623641
{
624642
clock_->pause();
625643
RCLCPP_INFO_STREAM(owner_->get_logger(), "Pausing play.");
626-
progress_bar_->print_paused_status(clock_->now());
644+
print_paused_status();
627645
}
628646

629647
void PlayerImpl::resume()
630648
{
631649
clock_->resume();
632650
RCLCPP_INFO_STREAM(owner_->get_logger(), "Resuming play.");
633-
progress_bar_->print_running_status(clock_->now());
651+
print_running_status();
634652
}
635653

636654
void PlayerImpl::toggle_paused()
@@ -658,9 +676,9 @@ bool PlayerImpl::set_rate(double rate)
658676
RCLCPP_WARN_STREAM(owner_->get_logger(), "Failed to set rate to invalid value " << rate);
659677
}
660678
if (clock_->is_paused()) {
661-
progress_bar_->print_paused_status(clock_->now());
679+
print_paused_status();
662680
} else {
663-
progress_bar_->print_running_status(clock_->now());
681+
print_running_status();
664682
}
665683
return ok;
666684
}
@@ -729,7 +747,7 @@ bool PlayerImpl::play_next()
729747
next_message_published = publish_message(message_ptr);
730748
clock_->jump(message_ptr->recv_timestamp);
731749

732-
progress_bar_->print_paused_status(clock_->now());
750+
print_paused_status();
733751
message_queue_.pop();
734752
message_ptr = peek_next_message_from_queue();
735753
}
@@ -740,7 +758,7 @@ size_t PlayerImpl::burst(const size_t num_messages)
740758
{
741759
if (!clock_->is_paused()) {
742760
RCLCPP_WARN_STREAM(owner_->get_logger(), "Burst can only be used when in the paused state.");
743-
progress_bar_->print_running_status(clock_->now());
761+
print_running_status();
744762
return 0;
745763
}
746764

@@ -755,7 +773,7 @@ size_t PlayerImpl::burst(const size_t num_messages)
755773
}
756774

757775
RCLCPP_INFO_STREAM(owner_->get_logger(), "Burst " << messages_played << " messages.");
758-
progress_bar_->print_running_status(clock_->now());
776+
print_running_status();
759777
return messages_played;
760778
}
761779

@@ -981,7 +999,7 @@ void PlayerImpl::play_messages_from_queue()
981999
continue;
9821000
}
9831001
publish_message(message_ptr);
984-
progress_bar_->print_running_status(clock_->now());
1002+
print_running_status();
9851003
}
9861004
message_queue_.pop();
9871005
message_ptr = peek_next_message_from_queue();
@@ -1553,6 +1571,36 @@ const rosbag2_transport::PlayOptions & PlayerImpl::get_play_options()
15531571
return play_options_;
15541572
}
15551573

1574+
inline void PlayerImpl::print_status(const char status) const
1575+
{
1576+
double current_time_secs = RCUTILS_NS_TO_S(static_cast<double>(clock_->now()));
1577+
double progress_secs = current_time_secs - starting_time_secs_;
1578+
printf(" Bag Time %13.6f Duration %.6f/%.6f [%c] \r",
1579+
current_time_secs, progress_secs, duration_secs_, status);
1580+
fflush(stdout);
1581+
}
1582+
1583+
inline void PlayerImpl::print_running_status() const
1584+
{
1585+
if (!disable_progress_bar_) {
1586+
print_status('R');
1587+
}
1588+
}
1589+
1590+
inline void PlayerImpl::print_paused_status() const
1591+
{
1592+
if (!disable_progress_bar_) {
1593+
print_status('P');
1594+
}
1595+
}
1596+
1597+
inline void PlayerImpl::print_delayed_status() const
1598+
{
1599+
if (!disable_progress_bar_) {
1600+
print_status('D');
1601+
}
1602+
}
1603+
15561604
///////////////////////////////
15571605
// Player public interface
15581606

0 commit comments

Comments
 (0)