mirror of
https://github.com/esphome/esphome.git
synced 2026-09-12 07:47:33 +00:00
9733c28c40109e4936d97cc472a079f1d4455f2a
In yield_with_select_(), the fast select path iterated all monitored sockets and called esphome_lwip_socket_has_data(fd) for each one. That C function called lwip_socket_dbg_get_socket(fd) — a cross- compilation-unit call that can't be inlined because sockets[] is static in lwip's sockets.c. The actual rcvevent check is ~4 instructions, but the lookup adds entry/retw window overhead on Xtensa (~8-12 cycles per socket per loop iteration). Now lwip_sock* pointers are cached at socket registration time and stored directly in monitored_sockets_. The hot path iterates pointers and reads rcvevent with no fd lookup. esphome_lwip_hook_socket() also takes lwip_sock* directly, avoiding a redundant get_sock() call. API split for fast select vs fallback select: - register_socket(lwip_sock*) / unregister_socket(lwip_sock*) - register_socket_fd(int fd) / unregister_socket_fd(int fd) Chained on top of socket-devirtualize (#14398).
Description
ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems.
Readme
Multiple Licenses
592 MiB
Languages
C++
55.8%
Python
43.6%
C
0.3%
JavaScript
0.2%
