Revert "[core] Trim Scheduler::call fast path"

This reverts commit c2e6787e23.
This commit is contained in:
J. Nick Koston
2026-04-24 16:39:27 -05:00
parent 54fdc06322
commit c7dc55ea33
2 changed files with 8 additions and 15 deletions
+7 -14
View File
@@ -615,21 +615,14 @@ uint32_t HOT Scheduler::call(uint32_t now) {
}
#endif /* ESPHOME_DEBUG_SCHEDULER */
// Cleanup removed items before processing. Read the counter once so the
// common zero-case is a single atomic load + branch; the old code called
// cleanup_() (which loads to_remove_) and then to_remove_count_() again for
// the MAX check, producing a redundant memw+load pair on the fast path.
if (this->to_remove_count_() != 0) {
// First try to clean items from the top of the heap (fast path).
this->cleanup_slow_path_();
// Cleanup removed items before processing
// First try to clean items from the top of the heap (fast path)
this->cleanup_();
// If we still have too many cancelled items, do a full cleanup.
// This only happens if cancelled items are stuck in the middle/bottom
// of the heap. Re-read to_remove_ because cleanup_slow_path_ may have
// decremented it.
if (this->to_remove_count_() >= MAX_LOGICALLY_DELETED_ITEMS) {
this->full_cleanup_removed_items_();
}
// If we still have too many cancelled items, do a full cleanup
// This only happens if cancelled items are stuck in the middle/bottom of the heap
if (this->to_remove_count_() >= MAX_LOGICALLY_DELETED_ITEMS) {
this->full_cleanup_removed_items_();
}
// IMPORTANT: This loop uses index-based access (items_[0]), NOT iterators.
// This is intentional — fired intervals are pushed back into items_ via
+1 -1
View File
@@ -118,7 +118,7 @@ class Scheduler {
bool cancel_retry(Component *component, uint32_t id);
/// Get 64-bit millisecond timestamp (handles 32-bit millis() rollover)
uint64_t ESPHOME_ALWAYS_INLINE millis_64() { return esphome::millis_64(); }
uint64_t millis_64() { return esphome::millis_64(); }
// Calculate when the next scheduled item should run.
// @param now On ESP32, unused for 64-bit extension (native); on other platforms, extended to 64-bit via rollover.