From 7bfb1c3f393b4956e2db1137e62db2b613bf954f Mon Sep 17 00:00:00 2001 From: ClementTsang Date: Thu, 2 May 2024 17:59:37 -0400 Subject: [PATCH 1/2] use internal buffer's Buf impl for codec buffers The internal buffers within the codec EncodeBuf/DecodeBuf implementations contain slightly-more-optimized implementations of Buf, which we can take advantage of. --- tonic/src/codec/buffer.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tonic/src/codec/buffer.rs b/tonic/src/codec/buffer.rs index fcce82e1d..63d09874b 100644 --- a/tonic/src/codec/buffer.rs +++ b/tonic/src/codec/buffer.rs @@ -1,5 +1,5 @@ use bytes::buf::UninitSlice; -use bytes::{Buf, BufMut, BytesMut}; +use bytes::{Buf, BufMut, BytesMut, Bytes}; /// A specialized buffer to decode gRPC messages from. #[derive(Debug)] @@ -43,6 +43,13 @@ impl Buf for DecodeBuf<'_> { self.buf.advance(cnt); self.len -= cnt; } + + #[inline] + fn copy_to_bytes(&mut self, len: usize) -> Bytes { + assert!(len <= self.len); + self.len -= len; + self.buf.copy_to_bytes(len) + } } impl<'a> EncodeBuf<'a> { @@ -78,6 +85,24 @@ unsafe impl BufMut for EncodeBuf<'_> { fn chunk_mut(&mut self) -> &mut UninitSlice { self.buf.chunk_mut() } + + #[inline] + fn put(&mut self, src: T) + where + Self: Sized, + { + self.buf.put(src) + } + + #[inline] + fn put_slice(&mut self, src: &[u8]) { + self.buf.put_slice(src) + } + + #[inline] + fn put_bytes(&mut self, val: u8, cnt: usize) { + self.buf.put_bytes(val, cnt); + } } #[cfg(test)] From c7cbfda092369c25fc1b119160ccb61caa593347 Mon Sep 17 00:00:00 2001 From: ClementTsang Date: Fri, 24 May 2024 10:09:30 -0400 Subject: [PATCH 2/2] run cargo fmt --- tonic/src/codec/buffer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tonic/src/codec/buffer.rs b/tonic/src/codec/buffer.rs index 63d09874b..8fdbd2d3e 100644 --- a/tonic/src/codec/buffer.rs +++ b/tonic/src/codec/buffer.rs @@ -1,5 +1,5 @@ use bytes::buf::UninitSlice; -use bytes::{Buf, BufMut, BytesMut, Bytes}; +use bytes::{Buf, BufMut, Bytes, BytesMut}; /// A specialized buffer to decode gRPC messages from. #[derive(Debug)]