From 2ab54174e91f5beadd896645771763e6eaa46041 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 18 Mar 2026 12:49:42 -1000 Subject: [PATCH] [core] Devirtualize PollingComponent::set_update_interval MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the virtual keyword from set_update_interval and inline the trivial setter in the header. No component in the tree actually overrides this on PollingComponent — the only apparent override was in sds011 which extends Component (not PollingComponent), so it was just a name-hiding no-op that is also removed here. This allows the compiler to inline the setter at all 8 call sites generated by register_component, eliminating function call overhead and removing a vtable entry. --- esphome/components/sds011/sds011.h | 2 -- esphome/core/component.cpp | 1 - esphome/core/component.h | 4 +--- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/esphome/components/sds011/sds011.h b/esphome/components/sds011/sds011.h index 3be74e66d1..d65299c635 100644 --- a/esphome/components/sds011/sds011.h +++ b/esphome/components/sds011/sds011.h @@ -21,8 +21,6 @@ class SDS011Component : public Component, public uart::UARTDevice { void dump_config() override; void loop() override; - void set_update_interval(uint32_t val) { /* ignore */ - } void set_update_interval_min(uint8_t update_interval_min); void set_working_state(bool working_state); diff --git a/esphome/core/component.cpp b/esphome/core/component.cpp index bfe9beb272..a9e93f9131 100644 --- a/esphome/core/component.cpp +++ b/esphome/core/component.cpp @@ -508,7 +508,6 @@ void PollingComponent::stop_poller() { } uint32_t PollingComponent::get_update_interval() const { return this->update_interval_; } -void PollingComponent::set_update_interval(uint32_t update_interval) { this->update_interval_ = update_interval; } void __attribute__((noinline, cold)) WarnIfComponentBlockingGuard::warn_blocking(Component *component, uint32_t blocking_time) { diff --git a/esphome/core/component.h b/esphome/core/component.h index 557ba09bbc..02598b53ff 100644 --- a/esphome/core/component.h +++ b/esphome/core/component.h @@ -548,12 +548,10 @@ class PollingComponent : public Component { explicit PollingComponent(uint32_t update_interval); /** Manually set the update interval in ms for this polling object. - * - * Override this if you want to do some validation for the update interval. * * @param update_interval The update interval in ms. */ - virtual void set_update_interval(uint32_t update_interval); + void set_update_interval(uint32_t update_interval) { this->update_interval_ = update_interval; } // ========== OVERRIDE METHODS ========== // (You'll only need this when creating your own custom sensor)