Merge branch 'socket_latency' into socket_latency_loop_runtime_stats

This commit is contained in:
J. Nick Koston
2025-05-27 15:04:38 -05:00
4 changed files with 12 additions and 7 deletions

View File

@@ -17,7 +17,7 @@ bool Socket::ready() const {
return true;
}
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
// For loop-monitored sockets, check with the Application's select() results
int fd = this->get_fd();
if (fd < 0) {

View File

@@ -7,7 +7,7 @@
#include "esphome/components/status_led/status_led.h"
#endif
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
#include <cerrno>
#ifdef USE_ESP32
// ESP32 with BSD sockets actually uses lwIP underneath
@@ -129,7 +129,7 @@ void Application::loop() {
next_schedule = std::max(next_schedule, delay_time / 2);
delay_time = std::min(next_schedule, delay_time);
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
if (!this->socket_fds_.empty()) {
// Use select() with timeout when we have sockets to monitor
@@ -247,7 +247,7 @@ void Application::calculate_looping_components_() {
}
}
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
bool Application::register_socket_fd(int fd) {
// WARNING: This function is NOT thread-safe and must only be called from the main loop
// It modifies socket_fds_ and related variables without locking

View File

@@ -482,7 +482,7 @@ class Application {
Scheduler scheduler;
/// Register/unregister a socket file descriptor to be monitored for read events.
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
/// These functions update the fd_set used by select() in the main loop.
/// WARNING: These functions are NOT thread-safe. They must only be called from the main loop.
/// NOTE: File descriptors >= FD_SETSIZE (typically 10 on ESP) will be rejected with an error.
@@ -577,7 +577,7 @@ class Application {
const char *compilation_time_{nullptr};
bool name_add_mac_suffix_;
uint32_t last_loop_{0};
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
uint32_t loop_interval_{21}; // Increased interval when select() is available for better efficiency
#else
uint32_t loop_interval_{16}; // Standard interval for platforms without select()
@@ -587,7 +587,7 @@ class Application {
Component *current_component_{nullptr};
uint32_t loop_component_start_time_{0};
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#ifdef USE_SOCKET_SELECT_SUPPORT
// Socket select management
std::set<int> socket_fds_; // Set of all monitored socket file descriptors
bool socket_fds_changed_{false}; // Flag to rebuild base_read_fds_ when socket_fds_ changes

View File

@@ -7,6 +7,11 @@
#include "esphome/core/macros.h"
// Define a shorter macro for socket select support
#if (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)) && defined(FD_SETSIZE)
#define USE_SOCKET_SELECT_SUPPORT
#endif
// Informative flags
#define ESPHOME_BOARD "dummy_board"
#define ESPHOME_PROJECT_NAME "dummy project"