From aacc7e54d2aa54ed0650be5321b757ce3dfda8b6 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 20 Mar 2026 18:52:12 -1000 Subject: [PATCH] [core] Limit play_complex override to StatelessLambdaAction only LambdaAction and ContinuationAction overrides caused flash bloat by replacing shared base class play_complex instantiations with per-class copies. StatelessLambdaAction is the most common automation action and its no-args variant is only 24 bytes. --- esphome/core/base_automation.h | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/esphome/core/base_automation.h b/esphome/core/base_automation.h index b809c56f1a..f0b3898278 100644 --- a/esphome/core/base_automation.h +++ b/esphome/core/base_automation.h @@ -217,13 +217,6 @@ template class LambdaAction : public Action { public: explicit LambdaAction(std::function &&f) : f_(std::move(f)) {} - // Override play_complex to call play() non-virtually (qualified call), - // eliminating one virtual dispatch frame from the call stack. - void play_complex(const Ts &...x) override { - this->num_running_++; - LambdaAction::play(x...); - this->play_next_(x...); - } void play(const Ts &...x) override { this->f_(x...); } protected: @@ -257,13 +250,6 @@ template class ContinuationAction : public Action { public: explicit ContinuationAction(Action *parent) : parent_(parent) {} - // Override play_complex to call play() non-virtually (qualified call), - // eliminating one virtual dispatch frame from the call stack. - void play_complex(const Ts &...x) override { - this->num_running_++; - ContinuationAction::play(x...); - this->play_next_(x...); - } void play(const Ts &...x) override { this->parent_->play_next_(x...); } protected: