[benchmark] Enable codegen for api dependency chain (socket, network, mdns)

This commit is contained in:
J. Nick Koston
2026-03-20 16:21:31 -10:00
parent cf7b63da60
commit 4bf84b6c61
5 changed files with 23 additions and 17 deletions
+3 -13
View File
@@ -1,17 +1,7 @@
import esphome.codegen as cg
from tests.testing_helpers import ComponentManifestOverride
# Keep in sync with esphome/components/api/__init__.py
NOISE_C_LIB = ("esphome/noise-c", "0.1.11")
def override_manifest(manifest: ComponentManifestOverride) -> None:
# Add defines for frame helper headers without running the full api
# to_code (which brings in socket/network setup that fails in
# benchmark builds).
async def to_code(config):
cg.add_define("USE_API_PLAINTEXT")
cg.add_define("USE_API_NOISE")
cg.add_library(*NOISE_C_LIB)
manifest.to_code = to_code
# api must run its to_code to define USE_API, USE_API_PLAINTEXT,
# and add the noise-c library dependency.
manifest.enable_codegen()
@@ -92,7 +92,7 @@ static void PlaintextFrame_WriteBatch5(benchmark::State &state) {
for (auto _ : state) {
for (int i = 0; i < kInnerIterations; i++) {
APIBuffer buffer;
StaticVector<MessageInfo, 5> messages;
MessageInfo messages[5] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
for (int j = 0; j < 5; j++) {
uint16_t offset = buffer.size();
@@ -106,11 +106,10 @@ static void PlaintextFrame_WriteBatch5(benchmark::State &state) {
ProtoWriteBuffer writer(&buffer, offset + padding);
msg.encode(writer);
messages.push_back(MessageInfo(38, offset, size));
messages[j] = MessageInfo(38, offset, size);
}
helper->write_protobuf_messages(ProtoWriteBuffer(&buffer, 0),
std::span<const MessageInfo>(messages.data(), messages.size()));
helper->write_protobuf_messages(ProtoWriteBuffer(&buffer, 0), std::span<const MessageInfo>(messages, 5));
if ((i & 0xFF) == 0)
drain_socket(read_fd);
@@ -0,0 +1,5 @@
from tests.testing_helpers import ComponentManifestOverride
def override_manifest(manifest: ComponentManifestOverride) -> None:
manifest.enable_codegen()
@@ -0,0 +1,5 @@
from tests.testing_helpers import ComponentManifestOverride
def override_manifest(manifest: ComponentManifestOverride) -> None:
manifest.enable_codegen()
@@ -0,0 +1,7 @@
from tests.testing_helpers import ComponentManifestOverride
def override_manifest(manifest: ComponentManifestOverride) -> None:
# socket must run its to_code to define USE_SOCKET_IMPL_BSD_SOCKETS
# which is needed by the api frame helper benchmarks.
manifest.enable_codegen()