mirror of
https://github.com/esphome/esphome.git
synced 2026-02-25 04:45:29 -07:00
[core] Pass std::function by rvalue reference in set_timer_common_
Change set_timer_common_ to take std::function<void()>&& instead of by value. This avoids materializing a std::function copy on the stack at each call site — the caller just passes a pointer to the rvalue. On BK7231N (Thumb-1), each forwarder (set_timeout, set_interval) was 118 bytes due to the inlined std::function move constructor + register spilling. With rvalue reference, they shrink to 32 bytes each. All 12 callers already pass rvalues (std::move or lambda temporaries), so this is a purely mechanical change with no semantic difference. BK7231N: forwarders 118 -> 32 bytes each, ~258 bytes saved total ESP32: forwarders 46 -> 30 bytes each, ~20 bytes saved total
This commit is contained in:
@@ -135,7 +135,7 @@ bool Scheduler::is_retry_cancelled_locked_(Component *component, NameType name_t
|
||||
// name_type determines storage type: STATIC_STRING uses static_name, others use hash_or_id
|
||||
void HOT Scheduler::set_timer_common_(Component *component, SchedulerItem::Type type, NameType name_type,
|
||||
const char *static_name, uint32_t hash_or_id, uint32_t delay,
|
||||
std::function<void()> func, bool is_retry, bool skip_cancel) {
|
||||
std::function<void()> &&func, bool is_retry, bool skip_cancel) {
|
||||
if (delay == SCHEDULER_DONT_RUN) {
|
||||
// Still need to cancel existing timer if we have a name/id
|
||||
if (!skip_cancel) {
|
||||
|
||||
@@ -255,7 +255,7 @@ class Scheduler {
|
||||
// Common implementation for both timeout and interval
|
||||
// name_type determines storage type: STATIC_STRING uses static_name, others use hash_or_id
|
||||
void set_timer_common_(Component *component, SchedulerItem::Type type, NameType name_type, const char *static_name,
|
||||
uint32_t hash_or_id, uint32_t delay, std::function<void()> func, bool is_retry = false,
|
||||
uint32_t hash_or_id, uint32_t delay, std::function<void()> &&func, bool is_retry = false,
|
||||
bool skip_cancel = false);
|
||||
|
||||
// Common implementation for retry - Remove before 2026.8.0
|
||||
|
||||
Reference in New Issue
Block a user