Extended size report#

pw_protobuf: Expressive interface for encoding and decoding protocol buffers

pw_protobuf can impact binary size very differently depending on how it’s used. A series of examples are provided below to illustrate how much certain use cases affect binary size.

Overview#

This module includes a proto encoder, two different proto decoders (one that operates on a pw::stream::StreamReader and another that operates on an in- memory buffer), codegen for direct wire-format encoders/decoders, and a table-based codegen system for constructing proto messages as in-memory structs.

Here’s a brief overview of the different encoder/decoder costs:

Label

Segment

Delta

Full wire-format proto encode/decode library

FLASH

+64

pw::protobuf::FieldKey::FieldKey()

-2

pw::protobuf::StreamEncoder::WriteVarint()

-2

pw::protobuf::MemoryEncoder::MemoryEncoder()

NEW

+756

pw::protobuf::StreamEncoder::WritePackedVarints<>()

NEW

+732

pw::protobuf::StreamDecoder::ReadRepeatedFixedField<>()

NEW

+644

pw::protobuf::StreamDecoder::ReadRepeatedVarintField<>()

NEW

+284

pw::protobuf::StreamDecoder::ReadVarintField<>()

NEW

+272

pw::protobuf::StreamDecoder::ReadOneVarint()

NEW

+258

pw::protobuf::StreamDecoder::ReadFixedField<>()

NEW

+228

pw::protobuf::StreamEncoder::GetNestedEncoder()

NEW

+224

pw::protobuf::StreamDecoder::ReadFieldKey()

NEW

+196

pw::protobuf::StreamDecoder::ReadPackedVarintField()

NEW

+192

pw::protobuf::StreamEncoder::WriteLengthDelimitedFieldFromStream()

NEW

+192

pw::protobuf::StreamEncoder::WritePackedFixed()

NEW

+184

pw::protobuf::Decoder::GetFieldSize()

NEW

+180

pw::protobuf::StreamDecoder::SkipField()

NEW

+112

pw::protobuf::Decoder::ConsumeKey()

NEW

+112

pw::protobuf::StreamDecoder::ReadPackedFixedField()

NEW

+104

pw::protobuf::StreamDecoder::CloseNestedDecoder()

NEW

+104

pw::protobuf::StreamDecoder::ReadVarintField()

NEW

+100

pw::protobuf::StreamDecoder::GetBytesReader()

NEW

+100

pw::protobuf::StreamDecoder::ReadDelimitedField()

NEW

+100

pw::protobuf::StreamDecoder::ReadFixedField()

NEW

+96

pw::protobuf::StreamDecoder::CheckOkToRead()

NEW

+94

pw::protobuf::StreamDecoder::BytesReader::DoSeek()

NEW

+92

pw::protobuf::StreamDecoder::Next()

NEW

+90

pw::protobuf::StreamDecoder::BytesReader::DoRead()

NEW

+84

pw::protobuf::Decoder::ReadDelimited()

NEW

+80

pw::protobuf::StreamEncoder::WriteFixed()

NEW

+76

pw::protobuf::Decoder::FieldNumber()

NEW

+76

pw::protobuf::StreamDecoder::Advance()

NEW

+76

pw::protobuf::StreamDecoder::~StreamDecoder()

NEW

+72

pw::protobuf::Decoder::ReadFixed()

NEW

+72

pw::protobuf::FieldKey::IsValidKey()

NEW

+64

pw::protobuf::StreamDecoder::CloseBytesReader()

NEW

+56

pw::protobuf::Decoder::Next()

NEW

+56

pw::protobuf::Decoder::ReadVarint()

NEW

+52

pw::protobuf::Decoder::ReadSint32()

NEW

+52

pw::protobuf::Decoder::ReadSint64()

NEW

+52

pw::protobuf::Decoder::SkipField()

NEW

+50

pw::protobuf::StreamDecoder::FieldNumber()

NEW

+48

pw::protobuf::StreamDecoder::StreamDecoder()

NEW

+44

pw::protobuf::StreamDecoder::GetLengthDelimitedPayloadBounds()

NEW

+42

pw::protobuf::StreamDecoder::BytesReader::~BytesReader()

NEW

+42

pw::protobuf::StreamEncoder::WriteFixed64()

NEW

+40

pw::protobuf::Decoder::ReadFixed<>()

NEW

+40

pw::protobuf::Decoder::ReadUint32()

NEW

+36

pw::protobuf::Decoder::ReadBool()

NEW

+36

pw::protobuf::StreamDecoder::BytesReader

NEW

+32

pw::protobuf::Decoder::ReadString()

NEW

+24

pw::protobuf::StreamEncoder::WriteZigzagVarint()

NEW

+20

pw::protobuf::StreamEncoder::WriteRepeatedDouble()

NEW

+20

pw::protobuf::StreamEncoder::WriteRepeatedFixed64()

NEW

+20

pw::protobuf::StreamEncoder::WriteRepeatedSfixed64()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedBool()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedFixed32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedFloat()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedInt32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedInt64()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedSfixed32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedSint32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedSint64()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedUint32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedUint64()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedInt32()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedInt64()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedSint32()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedSint64()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedUint32()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedUint64()

NEW

+14

pw::protobuf::StreamDecoder::ReadPackedBool()

NEW

+14

pw::protobuf::StreamEncoder::WriteFixed32()

NEW

+14

pw::protobuf::StreamEncoder::WriteFloat()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedDouble()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedFixed32()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedFixed64()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedFloat()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedSfixed32()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedSfixed64()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedDouble()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedFixed32()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedFixed64()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedFloat()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedSfixed32()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedSfixed64()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedBool()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedInt32()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedInt64()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedSint32()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedSint64()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedUint32()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedUint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadBool()

NEW

+10

pw::protobuf::StreamDecoder::ReadInt32()

NEW

+10

pw::protobuf::StreamDecoder::ReadInt64()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedBool()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedInt32()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedInt64()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedSint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedSint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedUint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedUint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadSint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadSint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadUint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadUint64()

+7,566

Including table-based Message encoder and decoder

FLASH

+64

pw::protobuf::FieldKey::FieldKey()

-2

pw::protobuf::StreamEncoder::WriteVarint()

-2

pw::protobuf::MemoryEncoder::MemoryEncoder()

NEW

+1,288

pw::protobuf::StreamEncoder::Write()

NEW

+928

pw::protobuf::StreamDecoder::Read()

NEW

+756

pw::protobuf::StreamEncoder::WritePackedVarints<>()

NEW

+732

pw::protobuf::StreamDecoder::ReadRepeatedFixedField<>()

NEW

+644

pw::protobuf::StreamDecoder::ReadRepeatedVarintField<>()

NEW

+284

pw::protobuf::StreamDecoder::ReadVarintField<>()

NEW

+272

pw::protobuf::StreamDecoder::ReadOneVarint()

NEW

+258

pw::protobuf::StreamDecoder::ReadFixedField<>()

NEW

+228

pw::protobuf::StreamEncoder::GetNestedEncoder()

NEW

+224

pw::protobuf::StreamDecoder::ReadFieldKey()

NEW

+196

pw::protobuf::StreamDecoder::ReadPackedVarintField()

NEW

+192

pw::protobuf::StreamEncoder::WriteLengthDelimitedFieldFromStream()

NEW

+192

pw::protobuf::StreamEncoder::WritePackedFixed()

NEW

+184

pw::protobuf::Decoder::GetFieldSize()

NEW

+180

pw::protobuf::StreamDecoder::SkipField()

NEW

+176

pw::protobuf::StreamDecoder::ReadStringOrBytesField<>()

NEW

+148

pw::protobuf::StreamDecoder::StreamDecoder()

NEW

+112

pw::protobuf::Decoder::ConsumeKey()

NEW

+112

pw::protobuf::StreamDecoder::ReadPackedFixedField()

NEW

+104

pw::protobuf::StreamDecoder::CloseNestedDecoder()

NEW

+104

pw::protobuf::StreamDecoder::ReadVarintField()

NEW

+100

pw::protobuf::StreamDecoder::GetBytesReader()

NEW

+100

pw::protobuf::StreamDecoder::ReadDelimitedField()

NEW

+100

pw::protobuf::StreamDecoder::ReadFixedField()

NEW

+96

pw::protobuf::StreamDecoder::CheckOkToRead()

NEW

+94

pw::protobuf::StreamDecoder::BytesReader::DoSeek()

NEW

+92

pw::protobuf::StreamDecoder::Next()

NEW

+88

pw::protobuf::StreamDecoder::BytesReader::DoRead()

NEW

+88

pw::protobuf::StreamDecoder::GetNestedDecoder()

NEW

+88

pw::protobuf::StreamEncoder::ResetOneOfCallbacks()

NEW

+84

pw::protobuf::Decoder::ReadDelimited()

NEW

+80

pw::protobuf::StreamEncoder::WriteFixed()

NEW

+76

pw::protobuf::Decoder::FieldNumber()

NEW

+76

pw::protobuf::StreamDecoder::Advance()

NEW

+76

pw::protobuf::StreamDecoder::~StreamDecoder()

NEW

+72

pw::protobuf::Decoder::ReadFixed()

NEW

+72

pw::protobuf::FieldKey::IsValidKey()

NEW

+64

pw::protobuf::StreamDecoder::CloseBytesReader()

NEW

+56

pw::protobuf::Decoder::Next()

NEW

+56

pw::protobuf::Decoder::ReadVarint()

NEW

+56

pw::protobuf::OneOf<>::Decode()

NEW

+52

pw::protobuf::Decoder::ReadSint32()

NEW

+52

pw::protobuf::Decoder::ReadSint64()

NEW

+52

pw::protobuf::Decoder::SkipField()

NEW

+50

pw::protobuf::StreamDecoder::FieldNumber()

NEW

+46

pw::protobuf::OneOf<>::Encode()

NEW

+46

pw::protobuf::StreamEncoder::WriteStringOrBytes<>()

NEW

+44

pw::protobuf::StreamDecoder::GetLengthDelimitedPayloadBounds()

NEW

+42

pw::protobuf::StreamDecoder::BytesReader::~BytesReader()

NEW

+42

pw::protobuf::StreamEncoder::WriteFixed64()

NEW

+40

pw::protobuf::Decoder::ReadFixed<>()

NEW

+40

pw::protobuf::Decoder::ReadUint32()

NEW

+36

pw::protobuf::Decoder::ReadBool()

NEW

+36

pw::protobuf::StreamDecoder::BytesReader

NEW

+34

pw::protobuf::Callback<>::Decode()

NEW

+34

pw::protobuf::Callback<>::Encode()

NEW

+32

pw::protobuf::Decoder::ReadString()

NEW

+24

pw::protobuf::StreamEncoder::WriteZigzagVarint()

NEW

+20

pw::protobuf::StreamEncoder::WriteRepeatedDouble()

NEW

+20

pw::protobuf::StreamEncoder::WriteRepeatedFixed64()

NEW

+20

pw::protobuf::StreamEncoder::WriteRepeatedSfixed64()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedBool()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedFixed32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedFloat()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedInt32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedInt64()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedSfixed32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedSint32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedSint64()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedUint32()

NEW

+18

pw::protobuf::StreamEncoder::WriteRepeatedUint64()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedInt32()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedInt64()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedSint32()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedSint64()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedUint32()

NEW

+16

pw::protobuf::StreamDecoder::ReadPackedUint64()

NEW

+14

pw::protobuf::StreamDecoder::ReadPackedBool()

NEW

+14

pw::protobuf::StreamEncoder::WriteFixed32()

NEW

+14

pw::protobuf::StreamEncoder::WriteFloat()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedDouble()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedFixed32()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedFixed64()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedFloat()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedSfixed32()

NEW

+14

pw::protobuf::StreamEncoder::WritePackedSfixed64()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedDouble()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedFixed32()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedFixed64()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedFloat()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedSfixed32()

NEW

+12

pw::protobuf::StreamDecoder::ReadPackedSfixed64()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedBool()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedInt32()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedInt64()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedSint32()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedSint64()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedUint32()

NEW

+12

pw::protobuf::StreamEncoder::WritePackedUint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadBool()

NEW

+10

pw::protobuf::StreamDecoder::ReadInt32()

NEW

+10

pw::protobuf::StreamDecoder::ReadInt64()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedBool()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedInt32()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedInt64()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedSint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedSint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedUint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadRepeatedUint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadSint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadSint64()

NEW

+10

pw::protobuf::StreamDecoder::ReadUint32()

NEW

+10

pw::protobuf::StreamDecoder::ReadUint64()

+10,448

Note

There’s some overhead involved in ensuring all of the encoder/decoder functionality is pulled in. Check the per-symbol breakdown for more details.

Encoder/decoder codegen overhead#

The different proto serialization/deserialization codegen methods have different overhead. Some have a higher up-front cost, but lower complexity (and therefore smaller compiler generated code) at the sites of usage. Others trade lower up-front code size cost for more complexity at the proto construction and read sites.

This example uses the following proto message to construct a variety of use cases to illustrate how code and memory requirements can change depending on the complexity of the proto message being encoded/decoded.

syntax = "proto3";

package pw.protobuf_size_report;

message ItemInfo {
  enum Access {
    NONE = 0;
    READ = 1;
    WRITE = 2;
    READ_AND_WRITE = 3;
  }
  uint64 offset = 1;
  uint32 size = 2;
  Access access_level = 3;
}

message ResponseInfo {
  oneof key {
    string key_string = 1;
    fixed32 key_token = 2;
  }

  optional int64 timestamp = 3;
  optional bool has_value = 4;
  ItemInfo item_info = 5;
}

message Response {
  repeated ResponseInfo responses = 1;
}

message LookupRequest {
  message AuthInfo {
    optional uint32 id = 1;
    optional uint32 token = 2;
  }
  oneof key {
    string key_string = 1;
    fixed32 key_token = 2;
  }
  optional uint32 items_per_response = 3;
  AuthInfo auth_info = 4;
  bool add_timestamp = 5;
}

This proto is configured with the following options file:


pw.protobuf_size_report.Reponse.responses max_count:4

Trivial proto#

This is a size report for encoding/decoding the pw.protobuf.test.ItemInfo message. This is a pretty trivial message with just a few integers.

Label

Segment

Delta

Direct wire format proto encoder

FLASH

NEW

+80

pw::protobuf_size_report::(anonymous namespace)::BasicDecode()

NEW

+60

pw::protobuf_size_report::(anonymous namespace)::BasicEncode()

NEW

+20

pw::protobuf_size_report::(anonymous namespace)::ConsumeValue<>()

+160

RAM

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::generic_encoder

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::decode_buffer

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::encode_buffer

NEW

+12

pw::protobuf_size_report::(anonymous namespace)::generic_decoder

+108

Generated wrappers for wire format encoder

FLASH

NEW

+108

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::ReadAccessLevel()

NEW

+88

pw::protobuf_size_report::(anonymous namespace)::BasicDecode()

NEW

+80

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::ReadOffset()

NEW

+80

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::ReadSize()

NEW

+44

pw::protobuf_size_report::(anonymous namespace)::BasicEncode()

NEW

+44

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::Field()

NEW

+12

pw::protobuf_size_report::pwpb::ItemInfo::MemoryEncoder::WriteAccessLevel()

NEW

+12

pw::protobuf_size_report::pwpb::ItemInfo::MemoryEncoder::WriteSize()

NEW

+10

pw::protobuf_size_report::pwpb::ItemInfo::MemoryEncoder::WriteOffset()

+478

RAM

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::decoder

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::encoder

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::decode_buffer

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::encode_buffer

NEW

+20

pw::protobuf_size_report::(anonymous namespace)::reader

+156

Generated message encoder

FLASH

NEW

+48

pw::protobuf_size_report::pwpb::ItemInfo::_kMessageFields

NEW

+44

pw::protobuf_size_report::(anonymous namespace)::BasicEncode()

NEW

+24

pw::protobuf_size_report::pwpb::ItemInfo::MemoryEncoder::Write()

NEW

+24

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::Read()

NEW

+20

pw::protobuf_size_report::(anonymous namespace)::BasicDecode()

+160

RAM

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::decoder

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::encoder

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::decode_buffer

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::encode_buffer

NEW

+20

pw::protobuf_size_report::(anonymous namespace)::reader

NEW

+16

pw::protobuf_size_report::(anonymous namespace)::message

+172

Optional and oneof#

This is a size report for encoding/decoding the pw.protobuf.test.ResponseInfo message. This is slightly more complex message that has a few explicitly optional fields, a oneof, and a submessage.

Label

Segment

Delta

Direct wire format proto encoder

FLASH

NEW

+208

pw::protobuf_size_report::(anonymous namespace)::BasicDecode()

NEW

+184

pw::protobuf_size_report::(anonymous namespace)::BasicEncode()

NEW

+86

pw::protobuf_size_report::(anonymous namespace)::DecodeItemInfo()

NEW

+38

pw::protobuf_size_report::(anonymous namespace)::ConsumeValue<>()

+516

RAM

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::encoder

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::decode_buffer

NEW

+28

pw::protobuf_size_report::(anonymous namespace)::encode_buffer

NEW

+12

pw::protobuf_size_report::(anonymous namespace)::decoder

+108

Generated wrappers for wire format encoder

FLASH

NEW

+204

pw::protobuf_size_report::(anonymous namespace)::BasicDecode()

NEW

+156

pw::protobuf_size_report::(anonymous namespace)::BasicEncode()

NEW

+108

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::ReadAccessLevel()

NEW

+100

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::GetItemInfoDecoder()

NEW

+88

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::ReadKeyString()

NEW

+84

pw::protobuf_size_report::(anonymous namespace)::DecodeItemInfo()

NEW

+80

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::ReadOffset()

NEW

+80

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::ReadSize()

NEW

+80

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::ReadHasValue()

NEW

+80

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::ReadKeyToken()

NEW

+80

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::ReadTimestamp()

NEW

+44

pw::protobuf_size_report::pwpb::ItemInfo::StreamDecoder::Field()

NEW

+42

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::Field()

NEW

+36

pw::protobuf_size_report::pwpb::ResponseInfo::MemoryEncoder::GetItemInfoEncoder()

NEW

+18

pw::protobuf_size_report::(anonymous namespace)::ConsumeValue<>()

NEW

+14

pw::protobuf_size_report::pwpb::ResponseInfo::MemoryEncoder::WriteKeyString()

NEW

+12

pw::protobuf_size_report::pwpb::ItemInfo::StreamEncoder::WriteAccessLevel()

NEW

+12

pw::protobuf_size_report::pwpb::ItemInfo::StreamEncoder::WriteSize()

NEW

+12

pw::protobuf_size_report::pwpb::ResponseInfo::MemoryEncoder::WriteHasValue()

NEW

+12

pw::protobuf_size_report::pwpb::ResponseInfo::MemoryEncoder::WriteKeyToken()

NEW

+10

pw::protobuf_size_report::pwpb::ItemInfo::StreamEncoder::WriteOffset()

NEW

+10

pw::protobuf_size_report::pwpb::ResponseInfo::MemoryEncoder::WriteTimestamp()

+1,362

RAM

NEW

+47

pw::protobuf_size_report::(anonymous namespace)::decode_buffer

NEW

+47

pw::protobuf_size_report::(anonymous namespace)::encode_buffer

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::decoder

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::encoder

NEW

+20

pw::protobuf_size_report::(anonymous namespace)::reader

+194

Generated message encoder

FLASH

NEW

+136

pw::protobuf_size_report::(anonymous namespace)::BasicEncode()

NEW

+108

pw::protobuf_size_report::(anonymous namespace)::BasicDecode()

NEW

+88

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::ReadKeyString()

NEW

+80

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::ReadKeyToken()

NEW

+80

pw::protobuf_size_report::pwpb::ResponseInfo::_kMessageFields

NEW

+48

pw::protobuf_size_report::pwpb::ItemInfo::_kMessageFields

NEW

+24

pw::protobuf_size_report::pwpb::ResponseInfo::MemoryEncoder::Write()

NEW

+24

pw::protobuf_size_report::pwpb::ResponseInfo::StreamDecoder::Read()

NEW

+18

pw::protobuf_size_report::(anonymous namespace)::ConsumeValue<>()

NEW

+14

pw::protobuf_size_report::pwpb::ResponseInfo::StreamEncoder::WriteKeyString()

NEW

+12

pw::protobuf_size_report::pwpb::ResponseInfo::StreamEncoder::WriteKeyToken()

NEW

+8

pw::protobuf_size_report::pwpb::ItemInfo::kMessageFields

+640

RAM

NEW

+56

pw::protobuf_size_report::(anonymous namespace)::message

NEW

+47

pw::protobuf_size_report::(anonymous namespace)::decode_buffer

NEW

+47

pw::protobuf_size_report::(anonymous namespace)::encode_buffer

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::decoder

NEW

+40

pw::protobuf_size_report::(anonymous namespace)::encoder

NEW

+20

pw::protobuf_size_report::(anonymous namespace)::reader

+250