mirror of
https://github.com/esphome/esphome.git
synced 2026-07-10 17:05:36 +00:00
3d5b1e327e
Replace encode_message with encode_sub_message for protobuf submessage encoding. For repeated submessage fields, encode_sub_message uses a backpatch approach: writes field tag, reserves 1 byte for length varint, encodes the body, then backpatches the actual length. For bodies >= 128 bytes, shifts the body forward to make room for a multi-byte varint. This eliminates 2 of 3 calculate_size() calls per repeated submessage element. For singular submessage fields, encode_sub_message uses calculate_size() upfront to skip empty submessages without writing to the buffer, preserving the debug size check. For the BLE advertisement proxy hot path (16 advertisements per batch), this reduces calculate_size() calls from 48 to 16 per flush.