From 2b8d4af1e7d70eb2cf41565bc04901938806a8ce Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 1 Apr 2026 09:46:04 -1000 Subject: [PATCH] [api] Inline DeferredBatch::push_item to avoid call overhead push_item was defined out-of-line in the .cpp to avoid duplicate _M_realloc_insert instantiation, but the function call overhead on every add_item was visible in benchmarks. Move it inline since it's a one-liner wrapper around push_back. --- esphome/components/api/api_connection.cpp | 2 -- esphome/components/api/api_connection.h | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 79df85ada3..6bcaf52ba6 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -2072,8 +2072,6 @@ void APIConnection::on_fatal_error() { this->flags_.remove = true; } -void __attribute__((flatten)) APIConnection::DeferredBatch::push_item(const BatchItem &item) { items.push_back(item); } - void APIConnection::DeferredBatch::add_item(EntityBase *entity, uint8_t message_type, uint8_t estimated_size, uint8_t aux_data_index) { // Check if we already have a message of this type for this entity diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index 4ce1335650..3187a6df05 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -647,8 +647,7 @@ class APIConnection final : public APIServerConnectionBase { uint8_t aux_data_index = AUX_DATA_UNUSED); // Add item to the front of the batch (for high priority messages like ping) void add_item_front(EntityBase *entity, uint8_t message_type, uint8_t estimated_size); - // Single push_back site to avoid duplicate _M_realloc_insert instantiation - void push_item(const BatchItem &item); + void push_item(const BatchItem &item) { items.push_back(item); } // Clear all items void clear() {