mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-07-30 14:43:05 +03:00
Create IOBuf on the stack using folly::IOBuf::wrapBufferAsValue for headers
Summary: Creating an IOBuf on the heap when we use `folly::IOBuf::wrapBuffer` is expensive. Reviewed By: hanidamlaj Differential Revision: D52506216 fbshipit-source-id: eed2b77beae0419b542b0461303785cc175e3518
This commit is contained in:
committed by
Facebook GitHub Bot
parent
364942346a
commit
b2db063139
@ -150,7 +150,7 @@ TEST_F(QuicPacketSchedulerTest, CryptoPaddingInitialPacket) {
|
||||
conn.cryptoState->initialStream, folly::IOBuf::copyBuffer("chlo"));
|
||||
auto result = cryptoOnlyScheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -183,7 +183,7 @@ TEST_F(QuicPacketSchedulerTest, PaddingInitialPureAcks) {
|
||||
.build();
|
||||
auto result = acksOnlyScheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -217,7 +217,7 @@ TEST_F(QuicPacketSchedulerTest, InitialPaddingDoesNotUseWrapper) {
|
||||
.build();
|
||||
auto result = acksOnlyScheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen - cipherOverhead);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -250,7 +250,7 @@ TEST_F(QuicPacketSchedulerTest, CryptoServerInitialPadded) {
|
||||
conn.cryptoState->initialStream, folly::IOBuf::copyBuffer("shlo"));
|
||||
auto result = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder1), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -283,7 +283,7 @@ TEST_F(QuicPacketSchedulerTest, PadTwoInitialPackets) {
|
||||
conn.cryptoState->initialStream, folly::IOBuf::copyBuffer("shlo"));
|
||||
auto result = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder1), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
|
||||
@ -302,7 +302,7 @@ TEST_F(QuicPacketSchedulerTest, PadTwoInitialPackets) {
|
||||
conn.cryptoState->initialStream, folly::IOBuf::copyBuffer("shlo again"));
|
||||
auto result2 = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder2), conn.udpSendPacketLen);
|
||||
packetLength = result2.packet->header->computeChainDataLength() +
|
||||
packetLength = result2.packet->header.computeChainDataLength() +
|
||||
result2.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -334,7 +334,7 @@ TEST_F(QuicPacketSchedulerTest, CryptoPaddingRetransmissionClientInitial) {
|
||||
StreamBuffer{folly::IOBuf::copyBuffer("chlo"), 0, false});
|
||||
auto result = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -397,7 +397,7 @@ TEST_F(QuicPacketSchedulerTest, CryptoWritePartialLossBuffer) {
|
||||
false});
|
||||
auto result = cryptoOnlyScheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_LE(packetLength, 25);
|
||||
EXPECT_TRUE(result.packet->packet.frames[0].asWriteCryptoFrame() != nullptr);
|
||||
@ -803,7 +803,9 @@ TEST_F(QuicPacketSchedulerTest, CloneSchedulerUseNormalSchedulerFirst) {
|
||||
packet.frames.push_back(MaxDataFrame(2832));
|
||||
RegularQuicPacketBuilder::Packet builtPacket(
|
||||
std::move(packet),
|
||||
folly::IOBuf::copyBuffer("if you are the dealer"),
|
||||
folly::IOBuf(
|
||||
folly::IOBuf::CopyBufferOp::COPY_BUFFER,
|
||||
"if you are the dealer"),
|
||||
folly::IOBuf::copyBuffer("I'm out of the game"));
|
||||
return SchedulingResult(folly::none, std::move(builtPacket));
|
||||
}));
|
||||
@ -827,7 +829,7 @@ TEST_F(QuicPacketSchedulerTest, CloneSchedulerUseNormalSchedulerFirst) {
|
||||
EXPECT_EQ(2832, maxDataFrame->maximumData);
|
||||
EXPECT_TRUE(folly::IOBufEqualTo{}(
|
||||
*folly::IOBuf::copyBuffer("if you are the dealer"),
|
||||
*result.packet->header));
|
||||
result.packet->header));
|
||||
EXPECT_TRUE(folly::IOBufEqualTo{}(
|
||||
*folly::IOBuf::copyBuffer("I'm out of the game"), *result.packet->body));
|
||||
}
|
||||
@ -989,7 +991,7 @@ TEST_F(QuicPacketSchedulerTest, CloningSchedulerWithInplaceBuilderFullPacket) {
|
||||
ASSERT_TRUE(scheduler.hasData());
|
||||
auto result = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto bufferLength = result.packet->header->computeChainDataLength() +
|
||||
auto bufferLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, bufferLength);
|
||||
updateConnection(
|
||||
@ -1062,7 +1064,7 @@ TEST_F(QuicPacketSchedulerTest, CloneLargerThanOriginalPacket) {
|
||||
auto packetResult = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen - cipherOverhead);
|
||||
auto encodedSize = packetResult.packet->body->computeChainDataLength() +
|
||||
packetResult.packet->header->computeChainDataLength() + cipherOverhead;
|
||||
packetResult.packet->header.computeChainDataLength() + cipherOverhead;
|
||||
EXPECT_EQ(encodedSize, conn.udpSendPacketLen);
|
||||
updateConnection(
|
||||
conn,
|
||||
@ -2399,14 +2401,14 @@ TEST_F(QuicPacketSchedulerTest, ShortHeaderPaddingWithSpaceForPadding) {
|
||||
auto result2 = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder2), conn.udpSendPacketLen);
|
||||
|
||||
auto headerLength1 = result1.packet->header->computeChainDataLength();
|
||||
auto headerLength1 = result1.packet->header.computeChainDataLength();
|
||||
auto bodyLength1 = result1.packet->body->computeChainDataLength();
|
||||
auto packetLength1 = headerLength1 + bodyLength1;
|
||||
auto expectedPadding1 =
|
||||
(conn.udpSendPacketLen - (inputDataLength1 + headerLength1)) %
|
||||
paddingModulo;
|
||||
|
||||
auto headerLength2 = result2.packet->header->computeChainDataLength();
|
||||
auto headerLength2 = result2.packet->header.computeChainDataLength();
|
||||
auto bodyLength2 = result2.packet->body->computeChainDataLength();
|
||||
auto packetLength2 = headerLength2 + bodyLength2;
|
||||
auto expectedPadding2 =
|
||||
@ -2457,7 +2459,7 @@ TEST_F(QuicPacketSchedulerTest, ShortHeaderPaddingNearMaxPacketLength) {
|
||||
auto result = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
|
||||
auto headerLength = result.packet->header->computeChainDataLength();
|
||||
auto headerLength = result.packet->header.computeChainDataLength();
|
||||
auto bodyLength = result.packet->body->computeChainDataLength();
|
||||
|
||||
auto packetLength = headerLength + bodyLength;
|
||||
@ -2512,7 +2514,7 @@ TEST_F(QuicPacketSchedulerTest, ShortHeaderPaddingMaxPacketLength) {
|
||||
auto result = scheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
|
||||
auto headerLength = result.packet->header->computeChainDataLength();
|
||||
auto headerLength = result.packet->header.computeChainDataLength();
|
||||
auto bodyLength = result.packet->body->computeChainDataLength();
|
||||
|
||||
auto packetLength = headerLength + bodyLength;
|
||||
@ -2551,7 +2553,7 @@ TEST_F(QuicPacketSchedulerTest, ImmediateAckFrameSchedulerOnRequest) {
|
||||
|
||||
auto result = immediateAckOnlyScheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
EXPECT_EQ(conn.udpSendPacketLen, packetLength);
|
||||
}
|
||||
@ -2587,7 +2589,7 @@ TEST_F(QuicPacketSchedulerTest, ImmediateAckFrameSchedulerNotRequested) {
|
||||
|
||||
auto result = immediateAckOnlyScheduler.scheduleFramesForPacket(
|
||||
std::move(builder), conn.udpSendPacketLen);
|
||||
auto packetLength = result.packet->header->computeChainDataLength() +
|
||||
auto packetLength = result.packet->header.computeChainDataLength() +
|
||||
result.packet->body->computeChainDataLength();
|
||||
// The immediate ACK scheduler was not triggered. This packet has no frames
|
||||
// and it shouldn't get padded.
|
||||
|
Reference in New Issue
Block a user