mirror of
https://github.com/esphome/esphome.git
synced 2026-07-10 17:05:36 +00:00
[api] Add speed_optimized proto option for hot encode paths
Add a new (speed_optimized) message option that emits
__attribute__((optimize("O2"))) on the generated encode() and
calculate_size() methods. Under -Os, GCC does not inline the small
ProtoEncode helpers (write_raw_byte, encode_varint, etc.) into the
generated methods, causing significant overhead on hot paths.
Apply to SensorStateResponse and BluetoothLERawAdvertisementsResponse
which are the highest-frequency encode paths.
This commit is contained in:
@@ -2682,8 +2682,7 @@ def build_message_type(
|
||||
# Check if this message wants speed-optimized encode/calculate_size.
|
||||
# When set, __attribute__((optimize("O2"))) is added to the definitions
|
||||
# so GCC inlines the small ProtoEncode helpers even under -Os.
|
||||
speed_opt = getattr(pb, "speed_optimized", None)
|
||||
is_speed_optimized = speed_opt is not None and get_opt(desc, speed_opt, False)
|
||||
is_speed_optimized = get_opt(desc, pb.speed_optimized, False)
|
||||
speed_attr = '__attribute__((optimize("O2"))) ' if is_speed_optimized else ""
|
||||
|
||||
# Only generate encode method if this message needs encoding and has fields
|
||||
|
||||
Reference in New Issue
Block a user