perf(net): borrow inbound packet storage
Decode headers, optional fields, fragments, and single-fragment messages directly over pooled datagrams. Copy only fragment state that crosses a datagram lifetime, preserve synchronous dispatch and ACK ordering, and lock the path to the owned decoder with differential and zero-allocation tests.
This commit is contained in:
parent
7211bb1bf7
commit
e928c5dd02
18 changed files with 1329 additions and 66 deletions
|
|
@ -75,6 +75,42 @@ public class MessageFragmentTests
|
|||
Assert.Equal(0, consumed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TryParse_ZeroFragmentCount_ReturnsNull()
|
||||
{
|
||||
var header = new MessageFragmentHeader
|
||||
{
|
||||
TotalSize = MessageFragmentHeader.Size,
|
||||
Count = 0,
|
||||
Index = 0,
|
||||
};
|
||||
byte[] buf = new byte[MessageFragmentHeader.Size];
|
||||
header.Pack(buf);
|
||||
|
||||
var (frag, consumed) = MessageFragment.TryParse(buf);
|
||||
|
||||
Assert.Null(frag);
|
||||
Assert.Equal(0, consumed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TryParse_IndexOutsideFragmentCount_ReturnsNull()
|
||||
{
|
||||
var header = new MessageFragmentHeader
|
||||
{
|
||||
TotalSize = MessageFragmentHeader.Size,
|
||||
Count = 2,
|
||||
Index = 2,
|
||||
};
|
||||
byte[] buf = new byte[MessageFragmentHeader.Size];
|
||||
header.Pack(buf);
|
||||
|
||||
var (frag, consumed) = MessageFragment.TryParse(buf);
|
||||
|
||||
Assert.Null(frag);
|
||||
Assert.Equal(0, consumed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TryParse_ConsumesExactlyOneFragment_LeavesRemainderForCaller()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue