refactor logger: add an enum for the reason of printing the cpu load

This commit is contained in:
Beat Küng
2018-05-03 10:54:56 +02:00
committed by Lorenz Meier
parent 2f553b956d
commit 9b72080ec1
2 changed files with 30 additions and 15 deletions
+21 -13
View File
@@ -978,7 +978,7 @@ void Logger::run()
} else {
// delayed stop: we measure the process loads and then stop
initialize_load_output();
initialize_load_output(PrintLoadReason::Postflight);
_should_stop_file_log = true;
}
}
@@ -1028,12 +1028,12 @@ void Logger::run()
if (_should_stop_file_log) {
_should_stop_file_log = false;
write_load_output(false);
write_load_output();
stop_log_file();
continue; // skip to next loop iteration
} else {
write_load_output(true);
write_load_output();
}
}
@@ -1484,7 +1484,7 @@ void Logger::start_log_file()
_start_time_file = hrt_absolute_time();
initialize_load_output();
initialize_load_output(PrintLoadReason::Preflight);
}
void Logger::stop_log_file()
@@ -1520,7 +1520,7 @@ void Logger::start_log_mavlink()
_writer.unselect_write_backend();
_writer.notify();
initialize_load_output();
initialize_load_output(PrintLoadReason::Preflight);
}
void Logger::stop_log_mavlink()
@@ -1578,18 +1578,26 @@ void Logger::print_load_callback(void *user)
return;
}
if (callback_data->preflight) {
perf_name = "perf_top_preflight";
} else {
perf_name = "perf_top_postflight";
switch (callback_data->logger->_print_load_reason) {
case PrintLoadReason::Preflight:
perf_name = "perf_top_preflight";
break;
case PrintLoadReason::Postflight:
perf_name = "perf_top_postflight";
break;
case PrintLoadReason::Watchdog:
perf_name = "perf_top_watchdog";
break;
default:
perf_name = "perf_top";
break;
}
callback_data->logger->write_info_multiple(perf_name, callback_data->buffer, callback_data->counter != 0);
++callback_data->counter;
}
void Logger::initialize_load_output()
void Logger::initialize_load_output(PrintLoadReason reason)
{
perf_callback_data_t callback_data;
callback_data.logger = this;
@@ -1601,16 +1609,16 @@ void Logger::initialize_load_output()
// this will not yet print anything
print_load_buffer(curr_time, buffer, sizeof(buffer), print_load_callback, &callback_data, &_load);
_next_load_print = curr_time + 1000000;
_print_load_reason = reason;
}
void Logger::write_load_output(bool preflight)
void Logger::write_load_output()
{
perf_callback_data_t callback_data = {};
char buffer[140];
callback_data.logger = this;
callback_data.counter = 0;
callback_data.buffer = buffer;
callback_data.preflight = preflight;
hrt_abstime curr_time = hrt_absolute_time();
_writer.set_need_reliable_transfer(true);
// TODO: maybe we should restrict the output to a selected backend (eg. when file logging is running
+9 -2
View File
@@ -161,6 +161,12 @@ public:
private:
enum class PrintLoadReason {
Preflight,
Postflight,
Watchdog
};
/**
* Write an ADD_LOGGED_MSG to the log for a all current subscriptions and instances
*/
@@ -297,12 +303,12 @@ private:
/**
* initialize the output for the process load, so that ~1 second later it will be written to the log
*/
void initialize_load_output();
void initialize_load_output(PrintLoadReason reason);
/**
* write the process load, which was previously initialized with initialize_load_output()
*/
void write_load_output(bool preflight);
void write_load_output();
static constexpr size_t MAX_TOPICS_NUM = 64; /**< Maximum number of logged topics */
@@ -344,6 +350,7 @@ private:
will be stopped after load printing */
print_load_s _load{}; ///< process load data
hrt_abstime _next_load_print{0}; ///< timestamp when to print the process load
PrintLoadReason _print_load_reason;
// control
param_t _sdlog_profile_handle{PARAM_INVALID};