Extended size report#

pw_rpc2: Next gen, zero-copy async RPC with end-to-end backpressure

pw_rpc2 is built on pw_async2, pw_allocator, pw_buf, and pw_transport to provide cooperative multiplexed calls, connection-oriented transport management, and end-to-end backpressure. Because its binary size impact depends on whether a device acts as a server, a client, or both—as well as which codegen API (raw buffers or pw_protobuf message structs) and execution model (futures or C++20 coroutines) are used—a series of size reports are provided below.

Core runtime and incremental#

The core size report measures the cost of adding Server and Client to an embedded system that already includes a async2::BasicDispatcher, a allocator::FirstFitAllocator, and a transport::ReliableDatagramSocket transport implementation.

The table below reports:

  • Core server cost: A Server accepting connections from a transport listener, performing the opening handshake, and dispatching packets to a registered raw unary Service.

  • Incremental service cost: Registering a second raw unary service on an existing server.

  • Core client cost: A Client performing the opening handshake over a transport socket and invoking a raw unary RPC via a generated client.

  • Incremental call cost: Invoking a second raw unary RPC method from an existing client.

  • Combined server and client cost: Running both Server and Client in the same binary, which share packet framing, the opening handshake state machine, connection task management, and active call multiplexing.

Label

Segment

Delta

Size of core pw::rpc2::Server with 1 transport and 1 raw unary service

RAM

NEW

+8

pw::rpc2::internal::ControlLock()::lock

+8

FLASH

+328

pw::rpc2::size_report::Measure()

NEW

+596

pw::rpc2::internal::ConnectionTask::ReadPacketFromConnection()

NEW

+536

pw::rpc2::internal::ServerConnectionTask::HandleIncomingRequest()

NEW

+440

pw::rpc2::internal::ConnectionTask::DeliverToCall()

NEW

+356

pw::rpc2::internal::ServerTask::PollListeners()

NEW

+336

pw::rpc2::internal::HandshakeFutureBase::PendReadPacket()

NEW

+328

pw::rpc2::ReserveWriteFuture::Pend()

NEW

+312

pw::rpc2::internal::ConnectionTask::ProcessOutgoingControlPackets()

NEW

+300

pw::rpc2::internal::WriteFutureBase::PendWriteAndTakeCall()

NEW

+284

pw::rpc2::internal::ResponderHandshakeFuture::Pend()

NEW

+268

pw::rpc2::internal::WriteReservationBase::CommitAndTakeCall()

NEW

+212

pw::rpc2::internal::HandshakeFutureBase::PendWritePacket()

NEW

+208

pw::rpc2::internal::ServerTask::ApplyPendingListeners()

NEW

+192

pw::rpc2::internal::ServerTask::SubmitListener()

NEW

+188

pw::rpc2::ReserveWriteFuture::ReserveWriteFuture()

NEW

+188

pw::rpc2::internal::ConnectionTask::QueueControlPacket()

NEW

+188

pw::rpc2::internal::ServerTask::~ServerTask()

NEW

+180

pw::rpc2::internal::ServerTask::DoPend()

NEW

+176

pw::rpc2::internal::ConnectionTask::ConnectionTask()

NEW

+176

pw::rpc2::internal::InboundPacket::Decode()

NEW

+172

pw::rpc2::internal::ServerConnectionTask::PollHandshake()

NEW

+148

pw::rpc2::internal::Call::ReserveWrite()

NEW

+148

pw::rpc2::internal::ServerTask::SubmitClose()

NEW

+140

pw::rpc2::internal::ConnectionTask::CloseConnection()

NEW

+136

pw::rpc2::internal::HandshakePacket::Decode()

NEW

+134

pw::rpc2::internal::ConnectionTask::~ConnectionTask()

NEW

+132

pw::rpc2::internal::ServerTask::ApplyPendingServices()

NEW

+128

pw::rpc2::internal::Call::CloseRead()

NEW

+124

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

NEW

+124

pw::rpc2::internal::OutboundPacket::EncodeHeader()

NEW

+124

pw::rpc2::internal::ServerCall::DoPend()

NEW

+116

pw::rpc2::internal::SendControlPacketFuture::Pend()

NEW

+114

pw::rpc2::internal::Call::~Call()

NEW

+112

pw::rpc2::internal::Call::ReserveMessageSlot()

NEW

+110

pw::rpc2::internal::ServerCall::~ServerCall()

NEW

+104

pw::rpc2::ControlFuture::Pend()

NEW

+104

pw::rpc2::internal::Call::InitChannel()

NEW

+104

pw::rpc2::internal::CallHandle::ReserveOutbound()

NEW

+104

pw::rpc2::internal::WriteReservationBase::PayloadSpan()

NEW

+102

pw::rpc2::internal::SendControlPacketFuture::SendControlPacketFuture()

NEW

+100

pw::rpc2::internal::ServerCall::CommitEmplacedFuture()

NEW

+96

pw::rpc2::internal::Call::OnMessage()

NEW

+96

pw::rpc2::internal::ServerTask::Shutdown()

NEW

+92

pw::rpc2::internal::BoxedMethodFuture::Pend()

NEW

+92

pw::rpc2::internal::ServerCall::ServerCall()

NEW

+92

pw::rpc2::internal::ServerTask::Start()

NEW

+90

pw::rpc2::ReserveWriteFuture::Create()

NEW

+88

pw::rpc2::internal::ConnectionTask::DispatchPendingIngressPacket()

NEW

+84

pw::rpc2::internal::ConnectionTask::PendPacket()

NEW

+84

pw::rpc2::internal::ServerConnectionTask::ServerConnectionTask()

NEW

+80

pw::rpc2::internal::Call::CloseWriteOnRetire()

NEW

+80

pw::rpc2::internal::ServerTask::RegisterService()

NEW

+76

pw::rpc2::internal::Call::Call()

NEW

+76

pw::rpc2::internal::WriteFutureBase::PendWrite()

NEW

+70

pw::rpc2::internal::ConnectionTask::DoPend()

NEW

+68

pw::rpc2::internal::(anonymous namespace)::EncodeAndCommitHeader()

NEW

+68

pw::rpc2::internal::ConnectionTask::StoreWaker()

NEW

+68

pw::rpc2::internal::WriteReservationBase::ReleaseCall()

NEW

+66

pw::rpc2::internal::SerializeTypeErased<>()

NEW

+66

pw::rpc2::internal::WriteReservationBase::WriteReservationBase()

NEW

+62

pw::rpc2::internal::ServerConnectionTask::PollOpenConnection()

NEW

+60

pw::rpc2::internal::HandshakeFutureBase::Cancel()

NEW

+60

pw::rpc2::internal::ServerTask::BlockOn()

NEW

+56

pw::rpc2::internal::Call::NotifyIfClosed()

NEW

+56

pw::rpc2::internal::HandshakeFutureImpl::Complete()

NEW

+56

pw::rpc2::internal::InboundPacket::error()

NEW

+56

pw::rpc2::internal::OutboundPacket::ClientError()

NEW

+56

pw::rpc2::internal::OutboundPacket::ServerError()

NEW

+52

pw::rpc2::Service::~Service()

NEW

+52

pw::rpc2::internal::ConnectionTask::PendPackets()

NEW

+52

pw::rpc2::internal::ListenerRecord::stop_accepting()

NEW

+50

pw::rpc2::ReserveWriteFuture::AbandonTerminalIfPending()

NEW

+50

pw::rpc2::internal::HandshakeFutureImpl::operator=()

NEW

+48

pw::rpc2::ControlFuture::TryTakeResolved()

NEW

+48

pw::rpc2::internal::Call::BeginTerminalWrite()

NEW

+48

pw::rpc2::internal::Call::Cancel()

NEW

+48

pw::rpc2::internal::Call::Complete()

NEW

+48

pw::rpc2::internal::ConnectionTask::FinishHandshake()

NEW

+48

pw::rpc2::internal::HandshakePacket::Encode()

NEW

+48

pw::rpc2::internal::InboundPacket::method_id()

NEW

+48

pw::rpc2::internal::InboundPacket::service_id()

NEW

+48

pw::rpc2::internal::ServerConnectionTask::CleanUpCalls()

NEW

+46

pw::rpc2::internal::Call::OnPeerStreamEnd()

NEW

+46

pw::rpc2::internal::HandshakeFutureImpl::Fail()

NEW

+46

pw::rpc2::internal::ServerConnectionTask::~ServerConnectionTask()

NEW

+44

pw::rpc2::internal::Call::BeginInvocation()

NEW

+44

pw::rpc2::internal::Call::CloseWrite()

NEW

+44

pw::rpc2::internal::PacketType::FromValidatedBits()

NEW

+44

pw::rpc2::internal::ServerCall::Retire()

NEW

+44

pw::rpc2::internal::ServerConnectionTask

NEW

+44

pw::rpc2::internal::WriterBase::ReserveResponse()

NEW

+44

pw::rpc2::internal::WriterBase::WriterBase()

NEW

+42

pw::rpc2::internal::ServerCall::Allocate()

NEW

+42

pw::rpc2::internal::ServerTask::RegisterListenerBlocking()

NEW

+40

pw::rpc2::internal::Call::DeliverFirstPayloadForStream()

NEW

+40

pw::rpc2::internal::ServerCall

NEW

+38

pw::rpc2::UnaryWriter<>::FinishCopy()

NEW

+38

pw::rpc2::internal::ConnectionTask::QueueFinish()

NEW

+38

pw::rpc2::internal::HandshakeFutureImpl::HandshakeFutureImpl()

NEW

+36

pw::rpc2::ControlFuture::listener_locked()

NEW

+36

pw::rpc2::ControlFuture::~ControlFuture()

NEW

+36

pw::rpc2::WriteFuture<>::Pend()

NEW

+36

pw::rpc2::internal::Call::connection_task()

NEW

+36

pw::rpc2::internal::Call::is_closed()

NEW

+36

pw::rpc2::internal::CallHandle::call()

NEW

+36

pw::rpc2::internal::ServerTask::Close()

NEW

+36

pw::rpc2::internal::ServerTask::RegisterListener()

NEW

+36

pw::rpc2::internal::WriteReservationBase::Drop()

NEW

+34

pw::rpc2::internal::Call::FlushDeferredWriterDrop()

NEW

+34

pw::rpc2::internal::IsServerError()

NEW

+34

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

NEW

+34

pw::rpc2::internal::ResponderHandshakeFuture::ResponderHandshakeFuture()

NEW

+34

pw::rpc2::internal::SendControlPacketFuture::operator=()

NEW

+32

pw::rpc2::internal::ConnectionTask

NEW

+32

pw::rpc2::internal::ConnectionTask::RegisterCall()

NEW

+30

pw::rpc2::Service::FindMethod()

NEW

+30

pw::rpc2::internal::Call::pw_recycle()

NEW

+30

pw::rpc2::internal::ConnectionTask::QueueError()

NEW

+30

pw::rpc2::internal::HandshakeFutureBase::operator=()

NEW

+30

pw::rpc2::internal::InboundPacket::payload_offset()

NEW

+30

pw::rpc2::internal::IsClientError()

NEW

+28

pw::rpc2::internal::BoxedMethodFuture::is_complete()

NEW

+28

pw::rpc2::internal::BoxedMethodFuture::operator=()

NEW

+28

pw::rpc2::internal::Call::QueueError()

NEW

+28

pw::rpc2::internal::HandshakeFutureImpl::~HandshakeFutureImpl()

NEW

+28

pw::rpc2::internal::MethodFutureImpl<>

NEW

+28

pw::rpc2::internal::ServerCall::ClearUserFuture()

NEW

+28

pw::rpc2::internal::ServerConnectionTask::ForceRetireAllCalls()

NEW

+28

pw::rpc2::internal::ServerTask::RemoveConnection()

NEW

+26

pw::rpc2::ReserveWriteFuture::~ReserveWriteFuture()

NEW

+26

pw::rpc2::internal::Call::QueueFinish()

NEW

+26

pw::rpc2::internal::OutboundPacket::Error()

NEW

+26

pw::rpc2::internal::ServerCall::FinishAndRequestRetirement()

NEW

+24

pw::rpc2::internal::Call::DetachFromConnection()

NEW

+24

pw::rpc2::internal::Call::QueueWriterDropPacket()

NEW

+24

pw::rpc2::internal::ConnectionTask::FindCallById()

NEW

+24

pw::rpc2::internal::InboundPacket::TakePayload()

NEW

+24

pw::rpc2::internal::ServerTask::FindService()

NEW

+24

pw::rpc2::internal::ServerTask::SignalControlLocked()

NEW

+24

pw::rpc2::internal::WriteReservationBase::~WriteReservationBase()

NEW

+22

pw::rpc2::ReserveWriteFuture::Response()

NEW

+22

pw::rpc2::WriteFuture<>::WriteFuture<>()

NEW

+22

pw::rpc2::internal::BoxedMethodFuture::Reset()

NEW

+20

pw::rpc2::ControlFuture::Pend()::{lambda()#1}::operator()()

NEW

+20

pw::rpc2::WriteFuture<>::~WriteFuture()

NEW

+20

pw::rpc2::internal::Call::OnError()

NEW

+20

pw::rpc2::internal::CallHandle::Reservation::~Reservation()

NEW

+20

pw::rpc2::internal::ServerCall::is_retirable()

NEW

+20

pw::rpc2::internal::ServerConnectionTask::OnClosed()

NEW

+20

pw::rpc2::internal::ServerTask

NEW

+18

pw::rpc2::internal::Call::AbandonTerminalWrite()

NEW

+18

pw::rpc2::internal::Call::CloseOnWriterDestroy()

NEW

+18

pw::rpc2::internal::Call::FinishInvocation()

NEW

+18

pw::rpc2::internal::ConnectionTask::Teardown()

NEW

+18

pw::rpc2::internal::HandshakeFutureBase::~HandshakeFutureBase()

NEW

+18

pw::rpc2::internal::InboundPacket::type()

NEW

+18

pw::rpc2::internal::WriterBase::CleanupIfUnfinished()

NEW

+16

pw::rpc2::internal::Call

NEW

+16

pw::rpc2::internal::WriteReservationBase::size()

NEW

+16

pw::rpc2::internal::WriterBase::~WriterBase()

NEW

+14

pw::rpc2::internal::MethodFutureImpl<>::Pend()

NEW

+14

pw::rpc2::internal::WriteReservationBase::data()

NEW

+12

pw::rpc2::size_report::pw_rpc2::raw::BaselineSizeReport::Service<>::kPwInternal_Methods

NEW

+10

pw::rpc2::UnaryWriter<>::UnaryWriter()

NEW

+10

pw::rpc2::internal::ConnectionTask::QueueCancel()

NEW

+10

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

NEW

+10

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

+13,472

Incremental cost of adding a second raw unary service to Server

FLASH

+64

pw::rpc2::size_report::Measure()

+124

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

NEW

+12

pw::rpc2::size_report::pw_rpc2::raw::UnarySizeReport::Service<>::kPwInternal_Methods

+200

Size of core pw::rpc2::Client with 1 transport and 1 raw unary call

RAM

NEW

+8

pw::rpc2::internal::ControlLock()::lock

+8

FLASH

+276

pw::rpc2::size_report::Measure()

NEW

+596

pw::rpc2::internal::ConnectionTask::ReadPacketFromConnection()

NEW

+512

pw::rpc2::ClientFuture::Pend()

NEW

+440

pw::rpc2::internal::ConnectionTask::DeliverToCall()

NEW

+336

pw::rpc2::internal::HandshakeFutureBase::PendReadPacket()

NEW

+328

pw::rpc2::ReserveWriteFuture::Pend()

NEW

+312

pw::rpc2::internal::ConnectionTask::ProcessOutgoingControlPackets()

NEW

+300

pw::rpc2::internal::WriteFutureBase::PendWriteAndTakeCall()

NEW

+284

pw::rpc2::internal::InitiatorHandshakeFuture::Pend()

NEW

+280

pw::rpc2::internal::ReadFutureBase::PendRaw()

NEW

+268

pw::rpc2::internal::WriteReservationBase::CommitAndTakeCall()

NEW

+260

pw::rpc2::internal::UnaryFutureBase::PendRaw()

NEW

+220

pw::rpc2::internal::GeneratedServiceClient::StartCall()

NEW

+212

pw::rpc2::internal::HandshakeFutureBase::PendWritePacket()

NEW

+188

pw::rpc2::ReserveWriteFuture::ReserveWriteFuture()

NEW

+188

pw::rpc2::internal::ConnectionTask::QueueControlPacket()

NEW

+176

pw::rpc2::internal::ConnectionTask::ConnectionTask()

NEW

+176

pw::rpc2::internal::InboundPacket::Decode()

NEW

+148

pw::rpc2::internal::Call::ReserveWrite()

NEW

+140

pw::rpc2::internal::ConnectionTask::CloseConnection()

NEW

+136

pw::rpc2::internal::HandshakePacket::Decode()

NEW

+134

pw::rpc2::internal::ConnectionTask::~ConnectionTask()

NEW

+128

pw::rpc2::internal::Call::CloseRead()

NEW

+124

pw::rpc2::internal::OutboundPacket::EncodeHeader()

NEW

+120

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

NEW

+116

pw::rpc2::internal::SendControlPacketFuture::Pend()

NEW

+114

pw::rpc2::internal::Call::~Call()

NEW

+112

pw::rpc2::internal::Call::ReserveMessageSlot()

NEW

+110

pw::rpc2::internal::GeneratedServiceClient::CallUnary<>()

NEW

+108

pw::rpc2::internal::ClientConnectionTask::RequestClose()

NEW

+104

pw::rpc2::internal::Call::InitChannel()

NEW

+104

pw::rpc2::internal::WriteReservationBase::PayloadSpan()

NEW

+102

pw::rpc2::internal::SendControlPacketFuture::SendControlPacketFuture()

NEW

+96

pw::rpc2::internal::Call::OnMessage()

NEW

+90

pw::rpc2::ReserveWriteFuture::Create()

NEW

+88

pw::rpc2::internal::ConnectionTask::DispatchPendingIngressPacket()

NEW

+84

pw::rpc2::internal::ConnectionTask::PendPacket()

NEW

+80

pw::rpc2::internal::Call::ClaimRead()

NEW

+76

pw::rpc2::internal::Call::Call()

NEW

+70

pw::rpc2::internal::ConnectionTask::DoPend()

NEW

+68

pw::rpc2::UnaryFuture<>::Pend()

NEW

+68

pw::rpc2::internal::(anonymous namespace)::EncodeAndCommitHeader()

NEW

+68

pw::rpc2::internal::ClientConnectionTask::ClientConnectionTask()

NEW

+68

pw::rpc2::internal::ConnectionTask::StoreWaker()

NEW

+68

pw::rpc2::internal::WriteReservationBase::ReleaseCall()

NEW

+66

pw::rpc2::ReserveWriteFuture::operator=()

NEW

+66

pw::rpc2::internal::SerializeTypeErased<>()

NEW

+66

pw::rpc2::internal::WriteReservationBase::WriteReservationBase()

NEW

+64

pw::rpc2::internal::ClientConnectionTask::OnClosed()

NEW

+60

pw::rpc2::internal::HandshakeFutureBase::Cancel()

NEW

+58

pw::rpc2::internal::HandshakeFutureImpl::HandshakeFutureImpl()

NEW

+56

pw::rpc2::internal::Call::NotifyIfClosed()

NEW

+56

pw::rpc2::internal::InboundPacket::error()

NEW

+56

pw::rpc2::internal::OutboundPacket::ClientError()

NEW

+56

pw::rpc2::internal::OutboundPacket::ServerError()

NEW

+54

pw::rpc2::internal::HandshakeFutureImpl::Complete()

NEW

+54

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

NEW

+52

pw::rpc2::Client::CreateCall()

NEW

+52

pw::rpc2::internal::ConnectionTask::PendPackets()

NEW

+50

pw::rpc2::ReserveWriteFuture::AbandonTerminalIfPending()

NEW

+50

pw::rpc2::internal::HandshakeFutureImpl::operator=()

NEW

+50

pw::rpc2::internal::UnaryFutureBase::UnaryFutureBase()

NEW

+48

pw::rpc2::internal::Call::BeginTerminalWrite()

NEW

+48

pw::rpc2::internal::Call::Cancel()

NEW

+48

pw::rpc2::internal::Call::Complete()

NEW

+48

pw::rpc2::internal::Call::ExpectSingleResponse()

NEW

+48

pw::rpc2::internal::ClientConnectionTask::NewCallId()

NEW

+48

pw::rpc2::internal::HandshakePacket::Encode()

NEW

+48

pw::rpc2::internal::ReadFutureBase::operator=()

NEW

+46

pw::rpc2::ClientFuture::MoveFrom()

NEW

+46

pw::rpc2::internal::Call::OnPeerStreamEnd()

NEW

+46

pw::rpc2::internal::ClientConnectionTask::~ClientConnectionTask()

NEW

+46

pw::rpc2::internal::HandshakeFutureImpl::Fail()

NEW

+46

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::~ClientMeasurementTask()

NEW

+44

pw::rpc2::internal::Call::CloseWrite()

NEW

+44

pw::rpc2::internal::ClientConnectionTask::AddUserHandle()

NEW

+44

pw::rpc2::internal::PacketType::FromValidatedBits()

NEW

+44

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

NEW

+42

pw::rpc2::Client::close_status()

NEW

+42

pw::rpc2::ClientFuture::ClientFuture()

NEW

+42

pw::rpc2::internal::ClientConnectionTask::PollOpenConnection()

NEW

+38

pw::rpc2::internal::ConnectionTask::QueueFinish()

NEW

+36

pw::rpc2::Client::Client()

NEW

+36

pw::rpc2::internal::Call::connection_task()

NEW

+36

pw::rpc2::internal::Call::is_closed()

NEW

+36

pw::rpc2::internal::CallHandle::call()

NEW

+36

pw::rpc2::internal::WriteReservationBase::Drop()

NEW

+34

pw::rpc2::internal::Call::FlushDeferredWriterDrop()

NEW

+34

pw::rpc2::internal::InitiatorHandshakeFuture::InitiatorHandshakeFuture()

NEW

+34

pw::rpc2::internal::IsServerError()

NEW

+34

pw::rpc2::internal::SendControlPacketFuture::operator=()

NEW

+32

pw::rpc2::Client::is_open()

NEW

+32

pw::rpc2::internal::ClientConnectionTask

NEW

+32

pw::rpc2::internal::ClientConnectionTask::HandleIncomingRequest()

NEW

+32

pw::rpc2::internal::ConnectionTask

NEW

+32

pw::rpc2::internal::ConnectionTask::RegisterCall()

NEW

+32

pw::rpc2::internal::IsClientError()

NEW

+30

pw::rpc2::internal::Call::pw_recycle()

NEW

+30

pw::rpc2::internal::ClientCall::Create()

NEW

+30

pw::rpc2::internal::ClientConnectionTask::ReleaseUserHandle()

NEW

+30

pw::rpc2::internal::ConnectionTask::QueueError()

NEW

+30

pw::rpc2::internal::HandshakeFutureBase::HandshakeFutureBase()

NEW

+30

pw::rpc2::internal::HandshakeFutureBase::operator=()

NEW

+30

pw::rpc2::internal::InboundPacket::payload_offset()

NEW

+28

pw::rpc2::internal::Call::QueueError()

NEW

+28

pw::rpc2::internal::HandshakeFutureImpl::~HandshakeFutureImpl()

NEW

+28

pw::rpc2::internal::ResponseFutureBase::ResponseFutureBase()

NEW

+26

pw::rpc2::ReserveWriteFuture::~ReserveWriteFuture()

NEW

+26

pw::rpc2::internal::Call::DetachFromConnection()

NEW

+26

pw::rpc2::internal::Call::QueueFinish()

NEW

+26

pw::rpc2::internal::ClientConnectionTask::CreateCall()

NEW

+26

pw::rpc2::internal::OutboundPacket::Error()

NEW

+24

pw::rpc2::ReserveWriteFuture::StartStream()

NEW

+24

pw::rpc2::ReserveWriteFuture::StartUnary()

NEW

+24

pw::rpc2::internal::Call::QueueWriterDropPacket()

NEW

+24

pw::rpc2::internal::ConnectionTask::FindCallById()

NEW

+24

pw::rpc2::internal::InboundPacket::TakePayload()

NEW

+24

pw::rpc2::internal::ReadFutureBase::~ReadFutureBase()

NEW

+24

pw::rpc2::internal::WriteReservationBase::~WriteReservationBase()

NEW

+22

pw::rpc2::UnaryFuture<>::UnaryFuture<>()

NEW

+22

pw::rpc2::internal::Call::CloseReadOnReaderDestroy()

NEW

+22

pw::rpc2::internal::Call::ReleaseRead()

NEW

+20

pw::rpc2::Client::ReleaseConnection()

NEW

+20

pw::rpc2::internal::Call::OnError()

NEW

+20

pw::rpc2::internal::ClientCall::ClientCall()

NEW

+20

pw::rpc2::internal::UnaryFutureBase::~UnaryFutureBase()

NEW

+20

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask

NEW

+18

pw::rpc2::Client::AddConnectionHandle()

NEW

+18

pw::rpc2::Client::~Client()

NEW

+18

pw::rpc2::UnaryFuture<>::~UnaryFuture()

NEW

+18

pw::rpc2::internal::Call::AbandonTerminalWrite()

NEW

+18

pw::rpc2::internal::Call::max_write_size_bytes()

NEW

+18

pw::rpc2::internal::ConnectionTask::Teardown()

NEW

+18

pw::rpc2::internal::GeneratedServiceClient::StartReservedCall()

NEW

+18

pw::rpc2::internal::HandshakeFutureBase::~HandshakeFutureBase()

NEW

+18

pw::rpc2::internal::ReadFutureBase::ReleaseRead()

NEW

+16

pw::rpc2::internal::Call

NEW

+16

pw::rpc2::internal::ClientCall

NEW

+16

pw::rpc2::internal::CopyMethod<>::Copy()

NEW

+16

pw::rpc2::internal::InboundPacket::type()

NEW

+16

pw::rpc2::internal::WriteReservationBase::size()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::BaselineSizeReport::Client::Client()

NEW

+14

pw::rpc2::Client::ReleaseConnectionIfHeld()

NEW

+14

pw::rpc2::internal::ClientCall::~ClientCall()

NEW

+14

pw::rpc2::internal::WriteReservationBase::data()

NEW

+10

pw::rpc2::ReserveWriteFuture::Failed()

NEW

+10

pw::rpc2::internal::ConnectionTask::QueueCancel()

+11,534

Incremental cost of making a second raw unary call in Client

FLASH

+84

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

+16

pw::rpc2::internal::CopyMethod<>::Copy()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::UnarySizeReport::Client::Client()

+116

Size of combined pw::rpc2::Server and pw::rpc2::Client (1 transport, 1 raw unary service, 1 raw unary call)

RAM

NEW

+8

pw::rpc2::internal::ControlLock()::lock

+8

FLASH

+532

pw::rpc2::size_report::Measure()

NEW

+596

pw::rpc2::internal::ConnectionTask::ReadPacketFromConnection()

NEW

+536

pw::rpc2::internal::ServerConnectionTask::HandleIncomingRequest()

NEW

+512

pw::rpc2::ClientFuture::Pend()

NEW

+440

pw::rpc2::internal::ConnectionTask::DeliverToCall()

NEW

+356

pw::rpc2::internal::ServerTask::PollListeners()

NEW

+352

pw::rpc2::internal::ConnectionTask::ConnectionTask()

NEW

+336

pw::rpc2::internal::HandshakeFutureBase::PendReadPacket()

NEW

+328

pw::rpc2::ReserveWriteFuture::Pend()

NEW

+312

pw::rpc2::internal::ConnectionTask::ProcessOutgoingControlPackets()

NEW

+300

pw::rpc2::internal::WriteFutureBase::PendWriteAndTakeCall()

NEW

+284

pw::rpc2::internal::InitiatorHandshakeFuture::Pend()

NEW

+284

pw::rpc2::internal::ResponderHandshakeFuture::Pend()

NEW

+280

pw::rpc2::internal::ReadFutureBase::PendRaw()

NEW

+268

pw::rpc2::internal::WriteReservationBase::CommitAndTakeCall()

NEW

+260

pw::rpc2::internal::UnaryFutureBase::PendRaw()

NEW

+220

pw::rpc2::internal::GeneratedServiceClient::StartCall()

NEW

+212

pw::rpc2::internal::HandshakeFutureBase::PendWritePacket()

NEW

+208

pw::rpc2::internal::ServerTask::ApplyPendingListeners()

NEW

+192

pw::rpc2::internal::ServerTask::SubmitListener()

NEW

+188

pw::rpc2::ReserveWriteFuture::ReserveWriteFuture()

NEW

+188

pw::rpc2::internal::ConnectionTask::QueueControlPacket()

NEW

+188

pw::rpc2::internal::ServerTask::~ServerTask()

NEW

+180

pw::rpc2::internal::ServerTask::DoPend()

NEW

+176

pw::rpc2::internal::InboundPacket::Decode()

NEW

+172

pw::rpc2::internal::ServerConnectionTask::PollHandshake()

NEW

+148

pw::rpc2::internal::Call::ReserveWrite()

NEW

+148

pw::rpc2::internal::ServerTask::SubmitClose()

NEW

+140

pw::rpc2::internal::ConnectionTask::CloseConnection()

NEW

+136

pw::rpc2::internal::HandshakePacket::Decode()

NEW

+134

pw::rpc2::internal::ConnectionTask::~ConnectionTask()

NEW

+132

pw::rpc2::internal::ServerTask::ApplyPendingServices()

NEW

+128

pw::rpc2::internal::Call::CloseRead()

NEW

+124

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

NEW

+124

pw::rpc2::internal::OutboundPacket::EncodeHeader()

NEW

+124

pw::rpc2::internal::ServerCall::DoPend()

NEW

+120

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

NEW

+116

pw::rpc2::internal::SendControlPacketFuture::Pend()

NEW

+114

pw::rpc2::internal::Call::~Call()

NEW

+112

pw::rpc2::internal::Call::ReserveMessageSlot()

NEW

+110

pw::rpc2::internal::GeneratedServiceClient::CallUnary<>()

NEW

+110

pw::rpc2::internal::ServerCall::~ServerCall()

NEW

+108

pw::rpc2::internal::ClientConnectionTask::RequestClose()

NEW

+104

pw::rpc2::ControlFuture::Pend()

NEW

+104

pw::rpc2::internal::Call::InitChannel()

NEW

+104

pw::rpc2::internal::CallHandle::ReserveOutbound()

NEW

+104

pw::rpc2::internal::WriteReservationBase::PayloadSpan()

NEW

+102

pw::rpc2::internal::SendControlPacketFuture::SendControlPacketFuture()

NEW

+100

pw::rpc2::internal::ServerCall::CommitEmplacedFuture()

NEW

+96

pw::rpc2::internal::Call::OnMessage()

NEW

+96

pw::rpc2::internal::ServerTask::Shutdown()

NEW

+92

pw::rpc2::internal::BoxedMethodFuture::Pend()

NEW

+92

pw::rpc2::internal::ServerCall::ServerCall()

NEW

+92

pw::rpc2::internal::ServerTask::Start()

NEW

+90

pw::rpc2::ReserveWriteFuture::Create()

NEW

+88

pw::rpc2::internal::ConnectionTask::DispatchPendingIngressPacket()

NEW

+84

pw::rpc2::internal::ConnectionTask::PendPacket()

NEW

+84

pw::rpc2::internal::ServerConnectionTask::ServerConnectionTask()

NEW

+80

pw::rpc2::internal::Call::ClaimRead()

NEW

+80

pw::rpc2::internal::Call::CloseWriteOnRetire()

NEW

+80

pw::rpc2::internal::ServerTask::RegisterService()

NEW

+76

pw::rpc2::internal::Call::Call()

NEW

+76

pw::rpc2::internal::WriteFutureBase::PendWrite()

NEW

+70

pw::rpc2::internal::ConnectionTask::DoPend()

NEW

+68

pw::rpc2::UnaryFuture<>::Pend()

NEW

+68

pw::rpc2::internal::(anonymous namespace)::EncodeAndCommitHeader()

NEW

+68

pw::rpc2::internal::ClientConnectionTask::ClientConnectionTask()

NEW

+68

pw::rpc2::internal::ConnectionTask::StoreWaker()

NEW

+68

pw::rpc2::internal::WriteReservationBase::ReleaseCall()

NEW

+66

pw::rpc2::ReserveWriteFuture::operator=()

NEW

+66

pw::rpc2::internal::SerializeTypeErased<>()

NEW

+66

pw::rpc2::internal::WriteReservationBase::WriteReservationBase()

NEW

+64

pw::rpc2::internal::ClientConnectionTask::OnClosed()

NEW

+60

pw::rpc2::internal::HandshakeFutureBase::Cancel()

NEW

+60

pw::rpc2::internal::ServerConnectionTask::PollOpenConnection()

NEW

+60

pw::rpc2::internal::ServerTask::BlockOn()

NEW

+58

pw::rpc2::internal::HandshakeFutureImpl::HandshakeFutureImpl()

NEW

+56

pw::rpc2::internal::Call::NotifyIfClosed()

NEW

+56

pw::rpc2::internal::HandshakeFutureImpl::Complete()

NEW

+56

pw::rpc2::internal::InboundPacket::error()

NEW

+56

pw::rpc2::internal::OutboundPacket::ClientError()

NEW

+56

pw::rpc2::internal::OutboundPacket::ServerError()

NEW

+54

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

NEW

+52

pw::rpc2::Client::CreateCall()

NEW

+52

pw::rpc2::Service::~Service()

NEW

+52

pw::rpc2::internal::ConnectionTask::PendPackets()

NEW

+52

pw::rpc2::internal::ListenerRecord::stop_accepting()

NEW

+50

pw::rpc2::ReserveWriteFuture::AbandonTerminalIfPending()

NEW

+50

pw::rpc2::internal::HandshakeFutureImpl::operator=()

NEW

+50

pw::rpc2::internal::UnaryFutureBase::UnaryFutureBase()

NEW

+48

pw::rpc2::ControlFuture::TryTakeResolved()

NEW

+48

pw::rpc2::internal::Call::BeginTerminalWrite()

NEW

+48

pw::rpc2::internal::Call::Cancel()

NEW

+48

pw::rpc2::internal::Call::Complete()

NEW

+48

pw::rpc2::internal::Call::ExpectSingleResponse()

NEW

+48

pw::rpc2::internal::ClientConnectionTask::NewCallId()

NEW

+48

pw::rpc2::internal::ConnectionTask::FinishHandshake()

NEW

+48

pw::rpc2::internal::HandshakePacket::Encode()

NEW

+48

pw::rpc2::internal::InboundPacket::method_id()

NEW

+48

pw::rpc2::internal::InboundPacket::service_id()

NEW

+48

pw::rpc2::internal::ReadFutureBase::operator=()

NEW

+48

pw::rpc2::internal::ServerConnectionTask::CleanUpCalls()

NEW

+46

pw::rpc2::ClientFuture::MoveFrom()

NEW

+46

pw::rpc2::internal::Call::OnPeerStreamEnd()

NEW

+46

pw::rpc2::internal::ClientConnectionTask::~ClientConnectionTask()

NEW

+46

pw::rpc2::internal::HandshakeFutureImpl::Fail()

NEW

+46

pw::rpc2::internal::ServerConnectionTask::~ServerConnectionTask()

NEW

+46

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::~ClientMeasurementTask()

NEW

+44

pw::rpc2::internal::Call::BeginInvocation()

NEW

+44

pw::rpc2::internal::Call::CloseWrite()

NEW

+44

pw::rpc2::internal::ClientConnectionTask::AddUserHandle()

NEW

+44

pw::rpc2::internal::PacketType::FromValidatedBits()

NEW

+44

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

NEW

+44

pw::rpc2::internal::ServerCall::Retire()

NEW

+44

pw::rpc2::internal::WriterBase::ReserveResponse()

NEW

+44

pw::rpc2::internal::WriterBase::WriterBase()

NEW

+42

pw::rpc2::Client::close_status()

NEW

+42

pw::rpc2::ClientFuture::ClientFuture()

NEW

+42

pw::rpc2::internal::ClientConnectionTask::PollOpenConnection()

NEW

+42

pw::rpc2::internal::ServerCall::Allocate()

NEW

+42

pw::rpc2::internal::ServerTask::RegisterListenerBlocking()

NEW

+40

pw::rpc2::internal::Call::DeliverFirstPayloadForStream()

NEW

+40

pw::rpc2::internal::ServerCall

NEW

+38

pw::rpc2::UnaryWriter<>::FinishCopy()

NEW

+38

pw::rpc2::internal::ConnectionTask::QueueFinish()

NEW

+36

pw::rpc2::Client::Client()

NEW

+36

pw::rpc2::ControlFuture::listener_locked()

NEW

+36

pw::rpc2::ControlFuture::~ControlFuture()

NEW

+36

pw::rpc2::WriteFuture<>::Pend()

NEW

+36

pw::rpc2::internal::Call::connection_task()

NEW

+36

pw::rpc2::internal::Call::is_closed()

NEW

+36

pw::rpc2::internal::CallHandle::call()

NEW

+36

pw::rpc2::internal::ServerTask::Close()

NEW

+36

pw::rpc2::internal::ServerTask::RegisterListener()

NEW

+36

pw::rpc2::internal::WriteReservationBase::Drop()

NEW

+34

pw::rpc2::internal::Call::FlushDeferredWriterDrop()

NEW

+34

pw::rpc2::internal::InitiatorHandshakeFuture::InitiatorHandshakeFuture()

NEW

+34

pw::rpc2::internal::IsServerError()

NEW

+34

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

NEW

+34

pw::rpc2::internal::ResponderHandshakeFuture::ResponderHandshakeFuture()

NEW

+34

pw::rpc2::internal::SendControlPacketFuture::operator=()

NEW

+32

pw::rpc2::Client::is_open()

NEW

+32

pw::rpc2::Service::FindMethod()

NEW

+32

pw::rpc2::internal::ClientConnectionTask

NEW

+32

pw::rpc2::internal::ClientConnectionTask::HandleIncomingRequest()

NEW

+32

pw::rpc2::internal::ConnectionTask

NEW

+32

pw::rpc2::internal::ConnectionTask::RegisterCall()

NEW

+32

pw::rpc2::internal::ServerConnectionTask

NEW

+30

pw::rpc2::internal::Call::pw_recycle()

NEW

+30

pw::rpc2::internal::ClientCall::Create()

NEW

+30

pw::rpc2::internal::ClientConnectionTask::ReleaseUserHandle()

NEW

+30

pw::rpc2::internal::ConnectionTask::QueueError()

NEW

+30

pw::rpc2::internal::HandshakeFutureBase::HandshakeFutureBase()

NEW

+30

pw::rpc2::internal::HandshakeFutureBase::operator=()

NEW

+30

pw::rpc2::internal::InboundPacket::payload_offset()

NEW

+30

pw::rpc2::internal::IsClientError()

NEW

+28

pw::rpc2::internal::BoxedMethodFuture::is_complete()

NEW

+28

pw::rpc2::internal::BoxedMethodFuture::operator=()

NEW

+28

pw::rpc2::internal::Call::QueueError()

NEW

+28

pw::rpc2::internal::HandshakeFutureImpl::~HandshakeFutureImpl()

NEW

+28

pw::rpc2::internal::MethodFutureImpl<>

NEW

+28

pw::rpc2::internal::ResponseFutureBase::ResponseFutureBase()

NEW

+28

pw::rpc2::internal::ServerCall::ClearUserFuture()

NEW

+28

pw::rpc2::internal::ServerConnectionTask::ForceRetireAllCalls()

NEW

+28

pw::rpc2::internal::ServerTask::RemoveConnection()

NEW

+26

pw::rpc2::ReserveWriteFuture::~ReserveWriteFuture()

NEW

+26

pw::rpc2::internal::Call::DetachFromConnection()

NEW

+26

pw::rpc2::internal::Call::QueueFinish()

NEW

+26

pw::rpc2::internal::ClientConnectionTask::CreateCall()

NEW

+26

pw::rpc2::internal::OutboundPacket::Error()

NEW

+26

pw::rpc2::internal::ServerCall::FinishAndRequestRetirement()

NEW

+24

pw::rpc2::ReserveWriteFuture::StartStream()

NEW

+24

pw::rpc2::ReserveWriteFuture::StartUnary()

NEW

+24

pw::rpc2::internal::Call::QueueWriterDropPacket()

NEW

+24

pw::rpc2::internal::ConnectionTask::FindCallById()

NEW

+24

pw::rpc2::internal::InboundPacket::TakePayload()

NEW

+24

pw::rpc2::internal::ReadFutureBase::~ReadFutureBase()

NEW

+24

pw::rpc2::internal::ServerTask::FindService()

NEW

+24

pw::rpc2::internal::ServerTask::SignalControlLocked()

NEW

+24

pw::rpc2::internal::WriteReservationBase::~WriteReservationBase()

NEW

+22

pw::rpc2::ReserveWriteFuture::Response()

NEW

+22

pw::rpc2::UnaryFuture<>::UnaryFuture<>()

NEW

+22

pw::rpc2::WriteFuture<>::WriteFuture<>()

NEW

+22

pw::rpc2::internal::BoxedMethodFuture::Reset()

NEW

+22

pw::rpc2::internal::Call::CloseReadOnReaderDestroy()

NEW

+22

pw::rpc2::internal::Call::ReleaseRead()

NEW

+20

pw::rpc2::Client::ReleaseConnection()

NEW

+20

pw::rpc2::ControlFuture::Pend()::{lambda()#1}::operator()()

NEW

+20

pw::rpc2::internal::Call::OnError()

NEW

+20

pw::rpc2::internal::CallHandle::Reservation::~Reservation()

NEW

+20

pw::rpc2::internal::ClientCall::ClientCall()

NEW

+20

pw::rpc2::internal::ServerCall::is_retirable()

NEW

+20

pw::rpc2::internal::ServerConnectionTask::OnClosed()

NEW

+20

pw::rpc2::internal::ServerTask

NEW

+20

pw::rpc2::internal::UnaryFutureBase::~UnaryFutureBase()

NEW

+20

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask

NEW

+18

pw::rpc2::Client::AddConnectionHandle()

NEW

+18

pw::rpc2::Client::~Client()

NEW

+18

pw::rpc2::UnaryFuture<>::~UnaryFuture()

NEW

+18

pw::rpc2::WriteFuture<>::~WriteFuture()

NEW

+18

pw::rpc2::internal::Call::AbandonTerminalWrite()

NEW

+18

pw::rpc2::internal::Call::CloseOnWriterDestroy()

NEW

+18

pw::rpc2::internal::Call::FinishInvocation()

NEW

+18

pw::rpc2::internal::Call::max_write_size_bytes()

NEW

+18

pw::rpc2::internal::ConnectionTask::Teardown()

NEW

+18

pw::rpc2::internal::GeneratedServiceClient::StartReservedCall()

NEW

+18

pw::rpc2::internal::HandshakeFutureBase::~HandshakeFutureBase()

NEW

+18

pw::rpc2::internal::ReadFutureBase::ReleaseRead()

NEW

+18

pw::rpc2::internal::WriterBase::CleanupIfUnfinished()

NEW

+16

pw::rpc2::internal::Call

NEW

+16

pw::rpc2::internal::ClientCall

NEW

+16

pw::rpc2::internal::CopyMethod<>::Copy()

NEW

+16

pw::rpc2::internal::InboundPacket::type()

NEW

+16

pw::rpc2::internal::WriteReservationBase::size()

NEW

+16

pw::rpc2::internal::WriterBase::~WriterBase()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::BaselineSizeReport::Client::Client()

NEW

+14

pw::rpc2::Client::ReleaseConnectionIfHeld()

NEW

+14

pw::rpc2::internal::ClientCall::~ClientCall()

NEW

+14

pw::rpc2::internal::MethodFutureImpl<>::Pend()

NEW

+14

pw::rpc2::internal::WriteReservationBase::data()

NEW

+12

pw::rpc2::size_report::pw_rpc2::raw::BaselineSizeReport::Service<>::kPwInternal_Methods

NEW

+10

pw::rpc2::ReserveWriteFuture::Failed()

NEW

+10

pw::rpc2::UnaryWriter<>::UnaryWriter()

NEW

+10

pw::rpc2::internal::ConnectionTask::QueueCancel()

NEW

+10

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

NEW

+10

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

+17,472

Note

pw_rpc2 allocates per-connection and per-call state dynamically from the configured pw::Allocator while connections and RPCs are active, freeing that memory as soon as calls and connections close. The static RAM delta reflects only the global control spinlock.

Service and client codegen costs#

pw_rpc2 supports two protobuf codegen backends and two asynchronous programming models:

  • Raw RPCs (raw_rpc2_proto_library): Pass zero-copy pw::ConstBuf payloads directly to and from the transport without linking a protobuf encoder or decoder.

  • PWPB RPCs (pwpb_rpc2_proto_library): Automatically serialize and deserialize pw_protobuf Message structs into reserved transport buffers.

  • Manual futures vs. C++20 coroutines: Services can implement RPCs either as hand-written <Method>Future state machines or as pw::async2::Coro<void> coroutines.

The codegen comparisons below use the following UnarySizeReport (single unary RPC) and SizeReport (all four RPC types: unary, server streaming, client streaming, and bidirectional streaming) service definitions:

message SizeReportMessage {
  uint32 value = 1;
}

service UnarySizeReport {
  rpc MeasureUnary(SizeReportMessage) returns (SizeReportMessage);
}

service SizeReport {
  rpc MeasureUnary(SizeReportMessage) returns (SizeReportMessage);
  rpc MeasureServerStream(SizeReportMessage) returns (stream SizeReportMessage);
  rpc MeasureClientStream(stream SizeReportMessage) returns (SizeReportMessage);
  rpc MeasureBidiStream(stream SizeReportMessage)
      returns (stream SizeReportMessage);
}

Generated service comparison#

The following table breaks out the one-time cost of pw_protobuf table-based Message serialization and pw_rpc2 PWPB helpers separately from the incremental cost of adding a generated service over the core server baseline (see pw_rpc2/size_report/service_codegen_size_report.cc for the service implementations):

  1. One-time ``pw_protobuf`` table encoder/decoder and ``pw_rpc2`` PWPB serialization: One-time cost of linking pw::protobuf::StreamEncoder, pw::protobuf::StreamDecoder, and pw_rpc2 PWPB serialization helpers when using pwpb RPCs (not needed for raw RPCs or if already linked elsewhere in the binary).

  2. Single unary RPC service (UnarySizeReport::Service): Incremental cost of adding a 1-method unary service in raw vs. pwpb (with futures or C++20 coroutines).

  3. Full 4-method service (SizeReport::Service): Incremental cost of adding all four RPC types (including streaming Reader and Writer support) in raw vs. pwpb (with futures or C++20 coroutines).

Label

Segment

Delta

One-time pw_protobuf table encoder/decoder and pw_rpc2 PWPB serialization

FLASH

+8

pw::rpc2::size_report::Measure()

+52

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

+112

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

NEW

+1,324

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

NEW

+956

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

NEW

+514

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

NEW

+252

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

NEW

+224

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

NEW

+196

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

NEW

+188

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

NEW

+182

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

NEW

+180

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

NEW

+180

pw::protobuf::StreamEncoder::GetNestedScratchBuffer()

NEW

+176

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

NEW

+176

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

NEW

+148

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

NEW

+114

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

NEW

+112

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

NEW

+108

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

NEW

+108

pw::rpc2::internal::PwpbEncodedSizeBytes()

NEW

+104

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

NEW

+104

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

NEW

+100

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

NEW

+100

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

NEW

+96

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

NEW

+92

pw::rpc2::internal::PwpbEncode()

NEW

+90

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

NEW

+88

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

NEW

+86

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

NEW

+84

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

NEW

+84

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

NEW

+84

pw::rpc2::internal::PwpbDecode()

NEW

+80

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

NEW

+76

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

NEW

+76

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

NEW

+72

pw::rpc2::size_report::(anonymous namespace)::ExercisePwpbTableEncoderDecoder()

NEW

+48

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

NEW

+44

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

NEW

+42

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

NEW

+36

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

NEW

+16

pw::rpc2::size_report::pwpb::SizeReportMessage::_kMessageFields

NEW

+8

pw::rpc2::size_report::pwpb::SizeReportMessage::kMessageFields

+6,920

Incremental cost of generated raw::UnarySizeReport::Service (1 unary RPC) with futures

FLASH

+64

pw::rpc2::size_report::Measure()

+124

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

NEW

+12

pw::rpc2::size_report::pw_rpc2::raw::UnarySizeReport::Service<>::kPwInternal_Methods

+200

Incremental cost of generated pwpb::UnarySizeReport::Service (1 unary RPC) with futures

FLASH

+60

pw::rpc2::size_report::Measure()

+140

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

+52

pw::rpc2::internal::SerializeTypeErased<>()

+20

pw::rpc2::WriteFuture<>::Pend()

+34

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

+28

pw::rpc2::internal::MethodFutureImpl<>

+14

pw::rpc2::WriteFuture<>::WriteFuture<>()

+14

pw::rpc2::internal::MethodFutureImpl<>::Pend()

+12

pw::rpc2::UnaryWriter<>::UnaryWriter()

+10

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

+10

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

NEW

+56

pw::rpc2::UnaryWriter<>::Finish<>()

NEW

+52

pw::rpc2::internal::PwpbSerde<>::Deserialize<>()

NEW

+24

pw::rpc2::internal::WriterBase::payload_limit()

NEW

+20

pw::rpc2::internal::PwpbSerde<>::Serialize<>()

NEW

+18

pw::rpc2::internal::Call::max_write_size_bytes()

NEW

+18

pw::rpc2::internal::PwpbSerializer<>::ReservationSize<>()

NEW

+16

pw::rpc2::internal::PwpbSerde<>::EncodedSizeBytes<>()

NEW

+12

pw::rpc2::size_report::pw_rpc2::pwpb::UnarySizeReport::Service<>::kPwInternal_Methods

+610

Incremental cost of generated pwpb::UnarySizeReport::Service (1 unary RPC) with C++20 coroutines

FLASH

+60

pw::rpc2::size_report::Measure()

+144

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

+52

pw::rpc2::internal::SerializeTypeErased<>()

+20

pw::rpc2::WriteFuture<>::Pend()

+34

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

+28

pw::rpc2::internal::MethodFutureImpl<>

+14

pw::rpc2::WriteFuture<>::WriteFuture<>()

+62

pw::rpc2::internal::MethodFutureImpl<>::Pend()

+10

pw::rpc2::UnaryWriter<>::UnaryWriter()

+10

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

+10

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

NEW

+224

pw::rpc2::size_report::(anonymous namespace)::PwpbUnaryCoroService::MeasureUnary()

NEW

+56

pw::rpc2::UnaryWriter<>::Finish<>()

NEW

+52

pw::rpc2::internal::PwpbSerde<>::Deserialize<>()

NEW

+24

pw::rpc2::internal::WriterBase::payload_limit()

NEW

+20

pw::rpc2::internal::PwpbSerde<>::Serialize<>()

NEW

+20

pw::rpc2::internal::PwpbSerializer<>::ReservationSize<>()

NEW

+18

pw::rpc2::internal::Call::max_write_size_bytes()

NEW

+16

pw::rpc2::internal::PwpbSerde<>::EncodedSizeBytes<>()

NEW

+14

pw::rpc2::WriteFuture<>::WriteFuture()

NEW

+12

pw::rpc2::size_report::pw_rpc2::pwpb::UnarySizeReport::Service<>::kPwInternal_Methods

+900

Incremental cost of generated raw::SizeReport::Service (all 4 RPC types) with futures

FLASH

+64

pw::rpc2::size_report::Measure()

+56

pw::rpc2::ReserveWriteFuture::ReserveWriteFuture()

+636

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

+12

pw::rpc2::WriteFuture<>::Pend()

+172

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

+84

pw::rpc2::internal::MethodFutureImpl<>

+2

pw::rpc2::internal::Call::DetachFromConnection()

+666

pw::rpc2::internal::MethodFutureImpl<>::Pend()

+32

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

+48

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

NEW

+280

pw::rpc2::internal::ReadFutureBase::PendRaw()

NEW

+80

pw::rpc2::internal::Call::ClaimRead()

NEW

+66

pw::rpc2::ReserveWriteFuture::operator=()

NEW

+52

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

NEW

+48

pw::rpc2::internal::ReadFutureBase::operator=()

NEW

+48

pw::rpc2::internal::WriterBase::ReserveMessage()

NEW

+48

pw::rpc2::internal::WriterBase::ReserveStreamEnd()

NEW

+48

pw::rpc2::size_report::pw_rpc2::raw::SizeReport::Service<>::kPwInternal_Methods

NEW

+42

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

NEW

+38

pw::rpc2::Writer<>::WriteCopy()

NEW

+32

pw::rpc2::Writer<>::Finish()

NEW

+28

pw::rpc2::ReserveWriteFuture::Finish()

NEW

+28

pw::rpc2::ReserveWriteFuture::Message()

NEW

+26

pw::rpc2::WriteFuture<>::operator=()

NEW

+24

pw::rpc2::internal::ReadFutureBase::~ReadFutureBase()

NEW

+22

pw::rpc2::internal::Call::CloseReadOnReaderDestroy()

NEW

+22

pw::rpc2::internal::Call::ReleaseRead()

NEW

+18

pw::rpc2::WriteFuture<>::WriteFuture()

NEW

+18

pw::rpc2::internal::ReadFutureBase::ReleaseRead()

NEW

+18

pw::rpc2::internal::ReaderBase::CloseReadIfHasCall()

NEW

+16

pw::rpc2::internal::ReaderBase::~ReaderBase()

NEW

+10

pw::rpc2::Writer<>::Writer()

+2,784

Incremental cost of generated pwpb::SizeReport::Service (all 4 RPC types) with futures

FLASH

+64

pw::rpc2::size_report::Measure()

+56

pw::rpc2::ReserveWriteFuture::ReserveWriteFuture()

+624

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

+52

pw::rpc2::internal::SerializeTypeErased<>()

+32

pw::rpc2::WriteFuture<>::Pend()

+190

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

+112

pw::rpc2::internal::MethodFutureImpl<>

+2

pw::rpc2::internal::Call::DetachFromConnection()

+28

pw::rpc2::WriteFuture<>::WriteFuture<>()

+572

pw::rpc2::internal::MethodFutureImpl<>::Pend()

+12

pw::rpc2::UnaryWriter<>::UnaryWriter()

+42

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

+58

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

NEW

+280

pw::rpc2::internal::ReadFutureBase::PendRaw()

NEW

+112

pw::rpc2::UnaryWriter<>::Finish<>()

NEW

+112

pw::rpc2::Writer<>::Write<>()

NEW

+88

pw::rpc2::internal::ReadFutureBase::PendAndDeserialize()

NEW

+86

pw::rpc2::internal::DeserializeTypeErased<>()

NEW

+80

pw::rpc2::internal::Call::ClaimRead()

NEW

+66

pw::rpc2::ReserveWriteFuture::operator=()

NEW

+52

pw::rpc2::internal::PwpbSerde<>::Deserialize<>()

NEW

+52

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

NEW

+48

pw::rpc2::internal::ReadFutureBase::operator=()

NEW

+48

pw::rpc2::internal::WriterBase::ReserveMessage()

NEW

+48

pw::rpc2::internal::WriterBase::ReserveStreamEnd()

NEW

+48

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Service<>::kPwInternal_Methods

NEW

+42

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

NEW

+32

pw::rpc2::Writer<>::Finish()

NEW

+28

pw::rpc2::ReadFuture<>::Pend()

NEW

+28

pw::rpc2::ReserveWriteFuture::Finish()

NEW

+28

pw::rpc2::ReserveWriteFuture::Message()

NEW

+24

pw::rpc2::internal::ReadFutureBase::~ReadFutureBase()

NEW

+24

pw::rpc2::internal::WriterBase::payload_limit()

NEW

+22

pw::rpc2::internal::Call::CloseReadOnReaderDestroy()

NEW

+22

pw::rpc2::internal::Call::ReleaseRead()

NEW

+20

pw::rpc2::internal::PwpbSerde<>::Serialize<>()

NEW

+18

pw::rpc2::WriteFuture<>::operator=()

NEW

+18

pw::rpc2::internal::Call::max_write_size_bytes()

NEW

+18

pw::rpc2::internal::PwpbSerializer<>::ReservationSize<>()

NEW

+18

pw::rpc2::internal::ReadFutureBase::ReleaseRead()

NEW

+18

pw::rpc2::internal::ReaderBase::CloseReadIfHasCall()

NEW

+16

pw::rpc2::internal::PwpbSerde<>::EncodedSizeBytes<>()

NEW

+16

pw::rpc2::internal::ReaderBase::~ReaderBase()

NEW

+12

pw::rpc2::WriteFuture<>::WriteFuture()

NEW

+10

pw::rpc2::Writer<>::Writer()

+3,378

Incremental cost of generated pwpb::SizeReport::Service (all 4 RPC types) with C++20 coroutines

FLASH

+64

pw::rpc2::size_report::Measure()

+576

pw::rpc2::internal::MethodInvokerBase<>::InvokeMethod<>()

+52

pw::rpc2::internal::SerializeTypeErased<>()

+32

pw::rpc2::WriteFuture<>::Pend()

+34

pw::rpc2::internal::MethodFutureImpl<>::~MethodFutureImpl()

+28

pw::rpc2::internal::MethodFutureImpl<>

+2

pw::rpc2::internal::Call::DetachFromConnection()

+28

pw::rpc2::WriteFuture<>::WriteFuture<>()

+62

pw::rpc2::internal::MethodFutureImpl<>::Pend()

+10

pw::rpc2::UnaryWriter<>::UnaryWriter()

+10

pw::rpc2::internal::MethodFutureImpl<>::is_complete()

+10

pw::rpc2::internal::MethodFutureImpl<>::is_pendable()

NEW

+418

pw::rpc2::size_report::(anonymous namespace)::PwpbCoroService::MeasureBidiStream()

NEW

+360

pw::rpc2::size_report::(anonymous namespace)::PwpbCoroService::MeasureClientStream()

NEW

+294

pw::rpc2::size_report::(anonymous namespace)::PwpbCoroService::MeasureServerStream()

NEW

+280

pw::rpc2::internal::ReadFutureBase::PendRaw()

NEW

+224

pw::rpc2::size_report::(anonymous namespace)::PwpbCoroService::MeasureUnary()

NEW

+112

pw::rpc2::UnaryWriter<>::Finish<>()

NEW

+88

pw::rpc2::internal::ReadFutureBase::PendAndDeserialize()

NEW

+86

pw::rpc2::internal::DeserializeTypeErased<>()

NEW

+80

pw::rpc2::internal::Call::ClaimRead()

NEW

+74

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

NEW

+56

pw::rpc2::Writer<>::Write<>()

NEW

+52

pw::rpc2::internal::PwpbSerde<>::Deserialize<>()

NEW

+52

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

NEW

+48

pw::rpc2::internal::WriterBase::ReserveMessage()

NEW

+48

pw::rpc2::internal::WriterBase::ReserveStreamEnd()

NEW

+48

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Service<>::kPwInternal_Methods

NEW

+32

pw::rpc2::Writer<>::Finish()

NEW

+28

pw::rpc2::ReadFuture<>::Pend()

NEW

+28

pw::rpc2::ReserveWriteFuture::Finish()

NEW

+28

pw::rpc2::ReserveWriteFuture::Message()

NEW

+24

pw::rpc2::internal::ReadFutureBase::~ReadFutureBase()

NEW

+24

pw::rpc2::internal::WriterBase::payload_limit()

NEW

+22

pw::rpc2::internal::Call::CloseReadOnReaderDestroy()

NEW

+22

pw::rpc2::internal::Call::ReleaseRead()

NEW

+20

pw::rpc2::internal::PwpbSerde<>::Serialize<>()

NEW

+20

pw::rpc2::internal::PwpbSerializer<>::ReservationSize<>()

NEW

+20

pw::rpc2::internal::ReaderBase::CloseReadIfHasCall()

NEW

+18

pw::rpc2::internal::Call::max_write_size_bytes()

NEW

+18

pw::rpc2::internal::ReadFutureBase::ReleaseRead()

NEW

+16

pw::rpc2::internal::PwpbSerde<>::EncodedSizeBytes<>()

NEW

+16

pw::rpc2::internal::ReaderBase::~ReaderBase()

NEW

+14

pw::rpc2::WriteFuture<>::WriteFuture()

NEW

+10

pw::rpc2::Writer<>::Writer()

+3,588

Generated client comparison#

The following table breaks out the one-time pw_protobuf table-based Message encoder/decoder and pw_rpc2 PWPB serialization cost separately from the incremental cost of calling generated SizeReport::Client methods over the core client baseline (see pw_rpc2/size_report/client_codegen_size_report.cc for the client implementation):

  1. One-time ``pw_protobuf`` table encoder/decoder and ``pw_rpc2`` PWPB serialization: One-time table serialization cost when using pwpb client calls.

  2. Single unary RPC call: Incremental cost of calling SizeReport::Client::MeasureUnary via raw vs. pwpb.

  3. All four RPC call types: Incremental cost of calling unary, server streaming, client streaming, and bidirectional streaming methods via raw vs. pwpb.

Label

Segment

Delta

One-time pw_protobuf table encoder/decoder and pw_rpc2 PWPB serialization

FLASH

+8

pw::rpc2::size_report::Measure()

+52

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

+112

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

NEW

+1,324

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

NEW

+956

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

NEW

+514

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

NEW

+252

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

NEW

+224

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

NEW

+196

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

NEW

+188

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

NEW

+182

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

NEW

+180

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

NEW

+180

pw::protobuf::StreamEncoder::GetNestedScratchBuffer()

NEW

+176

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

NEW

+176

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

NEW

+148

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

NEW

+114

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

NEW

+112

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

NEW

+108

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

NEW

+108

pw::rpc2::internal::PwpbEncodedSizeBytes()

NEW

+104

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

NEW

+104

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

NEW

+100

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

NEW

+100

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

NEW

+96

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

NEW

+92

pw::rpc2::internal::PwpbEncode()

NEW

+90

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

NEW

+88

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

NEW

+86

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

NEW

+84

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

NEW

+84

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

NEW

+84

pw::rpc2::internal::PwpbDecode()

NEW

+80

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

NEW

+76

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

NEW

+76

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

NEW

+72

pw::rpc2::size_report::(anonymous namespace)::ExercisePwpbTableEncoderDecoder()

NEW

+48

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

NEW

+44

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

NEW

+42

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

NEW

+36

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

NEW

+16

pw::rpc2::size_report::pwpb::SizeReportMessage::_kMessageFields

NEW

+8

pw::rpc2::size_report::pwpb::SizeReportMessage::kMessageFields

+6,920

Incremental cost of generated raw::SizeReport::Client calling 1 unary RPC

FLASH

+84

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

+16

pw::rpc2::internal::CopyMethod<>::Copy()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::SizeReport::Client::Client()

+116

Incremental cost of generated pwpb::SizeReport::Client calling 1 unary RPC

FLASH

+60

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

+120

pw::rpc2::internal::GeneratedServiceClient::CallUnary<>()

+40

pw::rpc2::UnaryFuture<>::Pend()

+50

pw::rpc2::internal::SerializeTypeErased<>()

+14

pw::rpc2::UnaryFuture<>::UnaryFuture<>()

NEW

+92

pw::rpc2::internal::UnaryFutureBase::PendAndDeserialize()

NEW

+86

pw::rpc2::internal::DeserializeTypeErased<>()

NEW

+52

pw::rpc2::internal::PwpbSerde<>::Deserialize<>()

NEW

+20

pw::rpc2::internal::PwpbSerde<>::Serialize<>()

NEW

+18

pw::rpc2::internal::PwpbSerializer<>::ReservationSize<>()

NEW

+16

pw::rpc2::internal::PwpbSerde<>::EncodedSizeBytes<>()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::Client()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::MeasureUnary()

NEW

+8

pw::rpc2::internal::GeneratedServiceClient::RequestSize<>()

+608

Incremental cost of generated raw::SizeReport::Client calling all 4 RPC types (unary, server/client/bidi stream)

FLASH

+224

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

-2

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

+32

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

+32

pw::rpc2::internal::CopyMethod<>::Copy()

NEW

+434

pw::rpc2::internal::RequestFutureBase::PendAndCreate<>()

NEW

+112

pw::rpc2::internal::GeneratedServiceClient::CallServerStream<>()

NEW

+64

pw::rpc2::RequestFuture<>::Pend()

NEW

+44

pw::rpc2::ClientStreamCall<>::ClientStreamCall()

NEW

+44

pw::rpc2::internal::WriterBase::WriterBase()

NEW

+38

pw::rpc2::internal::GeneratedServiceClient::CallBidiStream<>()

NEW

+38

pw::rpc2::internal::GeneratedServiceClient::CallClientStream<>()

NEW

+22

pw::rpc2::RequestFuture<>::RequestFuture<>()

NEW

+20

pw::rpc2::internal::ReaderBase::CloseReadIfHasCall()

NEW

+18

pw::rpc2::BidiStreamCall<>::BidiStreamCall()

NEW

+18

pw::rpc2::BidiStreamCall<>::~BidiStreamCall()

NEW

+18

pw::rpc2::ClientStreamCall<>::~ClientStreamCall()

NEW

+18

pw::rpc2::RequestFuture<>::~RequestFuture()

NEW

+18

pw::rpc2::internal::Call::CloseOnWriterDestroy()

NEW

+18

pw::rpc2::internal::WriterBase::CleanupIfUnfinished()

NEW

+16

pw::rpc2::internal::ReaderBase::~ReaderBase()

NEW

+16

pw::rpc2::internal::WriterBase::~WriterBase()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::SizeReport::Client::Client()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::SizeReport::Client::MeasureBidiStream()

NEW

+16

pw::rpc2::size_report::pw_rpc2::raw::SizeReport::Client::MeasureClientStream()

NEW

+10

pw::rpc2::Writer<>::Writer()

+1,300

Incremental cost of generated pwpb::SizeReport::Client calling all 4 RPC types (unary, server/client/bidi stream)

FLASH

+180

pw::rpc2::size_report::(anonymous namespace)::ClientMeasurementTask::DoPend()

+120

pw::rpc2::internal::GeneratedServiceClient::CallUnary<>()

+40

pw::rpc2::UnaryFuture<>::Pend()

+50

pw::rpc2::internal::SerializeTypeErased<>()

-2

pw::rpc2::internal::ReadFutureBase::ClaimReadIfHasCall()

+32

pw::rpc2::internal::ReadFutureBase::ReadFutureBase()

+14

pw::rpc2::UnaryFuture<>::UnaryFuture<>()

NEW

+434

pw::rpc2::internal::RequestFutureBase::PendAndCreate<>()

NEW

+120

pw::rpc2::internal::GeneratedServiceClient::CallServerStream<>()

NEW

+92

pw::rpc2::internal::UnaryFutureBase::PendAndDeserialize()

NEW

+86

pw::rpc2::internal::DeserializeTypeErased<>()

NEW

+52

pw::rpc2::internal::PwpbSerde<>::Deserialize<>()

NEW

+44

pw::rpc2::ClientStreamCall<>::ClientStreamCall()

NEW

+44

pw::rpc2::RequestFuture<>::Pend()

NEW

+44

pw::rpc2::internal::WriterBase::WriterBase()

NEW

+38

pw::rpc2::internal::GeneratedServiceClient::CallBidiStream<>()

NEW

+38

pw::rpc2::internal::GeneratedServiceClient::CallClientStream<>()

NEW

+20

pw::rpc2::internal::PwpbSerde<>::Serialize<>()

NEW

+20

pw::rpc2::internal::ReaderBase::CloseReadIfHasCall()

NEW

+18

pw::rpc2::BidiStreamCall<>::BidiStreamCall()

NEW

+18

pw::rpc2::BidiStreamCall<>::~BidiStreamCall()

NEW

+18

pw::rpc2::ClientStreamCall<>::~ClientStreamCall()

NEW

+18

pw::rpc2::internal::Call::CloseOnWriterDestroy()

NEW

+18

pw::rpc2::internal::PwpbSerializer<>::ReservationSize<>()

NEW

+18

pw::rpc2::internal::WriterBase::CleanupIfUnfinished()

NEW

+16

pw::rpc2::internal::PwpbSerde<>::EncodedSizeBytes<>()

NEW

+16

pw::rpc2::internal::ReaderBase::~ReaderBase()

NEW

+16

pw::rpc2::internal::WriterBase::~WriterBase()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::Client()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::MeasureBidiStream()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::MeasureClientStream()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::MeasureServerStream()

NEW

+16

pw::rpc2::size_report::pw_rpc2::pwpb::SizeReport::Client::MeasureUnary()

NEW

+14

pw::rpc2::RequestFuture<>::RequestFuture<>()

NEW

+10

pw::rpc2::Writer<>::Writer()

NEW

+8

pw::rpc2::internal::GeneratedServiceClient::RequestSize<>()

+1,734