[core] Inline status_clear_warning/error fast path

Move the flag-check early return for status_clear_warning() and
status_clear_error() into inline methods in the header. The slow
path (flag clear + log message) remains out-of-line.

This eliminates a call8 on every poll cycle for components that
call status_clear_warning() unconditionally on success, which is
the common pattern.
This commit is contained in:
J. Nick Koston
2026-03-06 11:03:36 -10:00
parent 0e2a10c5f0
commit 9370b0451d
2 changed files with 15 additions and 8 deletions
+2 -6
View File
@@ -422,15 +422,11 @@ void Component::status_set_error(const LogString *message) {
store_component_error_message(this, LOG_STR_ARG(message), true);
}
}
void Component::status_clear_warning() {
if ((this->component_state_ & STATUS_LED_WARNING) == 0)
return;
void Component::status_clear_warning_slow_path_() {
this->component_state_ &= ~STATUS_LED_WARNING;
ESP_LOGW(TAG, "%s cleared Warning flag", LOG_STR_ARG(this->get_component_log_str()));
}
void Component::status_clear_error() {
if ((this->component_state_ & STATUS_LED_ERROR) == 0)
return;
void Component::status_clear_error_slow_path_() {
this->component_state_ &= ~STATUS_LED_ERROR;
ESP_LOGE(TAG, "%s cleared Error flag", LOG_STR_ARG(this->get_component_log_str()));
}
+13 -2
View File
@@ -251,9 +251,17 @@ class Component {
void status_set_error(const char *message);
void status_set_error(const LogString *message);
void status_clear_warning();
void status_clear_warning() {
if ((this->component_state_ & STATUS_LED_WARNING) == 0)
return;
this->status_clear_warning_slow_path_();
}
void status_clear_error();
void status_clear_error() {
if ((this->component_state_ & STATUS_LED_ERROR) == 0)
return;
this->status_clear_error_slow_path_();
}
/** Set warning status flag and automatically clear it after a timeout.
*
@@ -505,6 +513,9 @@ class Component {
bool cancel_defer(const char *name); // NOLINT
bool cancel_defer(uint32_t id); // NOLINT
void status_clear_warning_slow_path_();
void status_clear_error_slow_path_();
// Ordered for optimal packing on 32-bit systems
const LogString *component_source_{nullptr};
uint16_t warn_if_blocking_over_{WARN_IF_BLOCKING_OVER_MS}; ///< Warn if blocked for this many ms (max 65.5s)