Introduce IovecToStringPiece() in QuicStreamSequencerBufferTest.
Introduce IovecToStringPiece() helper method for brevity. Also, previously
std::string() objects were instantiated at almost every call site, which
involves unnecessary copying. Creating a QuicStringPiece works just as fine.
gfe-relnote: n/a, test-only change.
PiperOrigin-RevId: 254789421
Change-Id: I75036c8b9f9f5e7a42ef53790facf97b59d32d39
diff --git a/quic/core/quic_stream_sequencer_buffer_test.cc b/quic/core/quic_stream_sequencer_buffer_test.cc
index f36e076..49f83f0 100644
--- a/quic/core/quic_stream_sequencer_buffer_test.cc
+++ b/quic/core/quic_stream_sequencer_buffer_test.cc
@@ -22,6 +22,11 @@
namespace test {
+QuicStringPiece IovecToStringPiece(iovec iov) {
+ return QuicStringPiece(reinterpret_cast<const char*>(iov.iov_base),
+ iov.iov_len);
+}
+
char GetCharFromIOVecs(size_t offset, iovec iov[], size_t count) {
size_t start_offset = 0;
for (size_t i = 0; i < count; i++) {
@@ -313,7 +318,7 @@
QUIC_LOG(ERROR) << error_details_;
EXPECT_EQ(100u, read);
EXPECT_EQ(100u, buffer_->BytesConsumed());
- EXPECT_EQ(source, std::string(dest, read));
+ EXPECT_EQ(source, QuicStringPiece(dest, read));
// The first block should be released as its data has been read out.
EXPECT_EQ(nullptr, helper_->GetBlock(0));
EXPECT_TRUE(helper_->CheckBufferInvariants());
@@ -478,8 +483,7 @@
int iov_count = buffer_->GetReadableRegions(iovs, 2);
EXPECT_EQ(1, iov_count);
EXPECT_EQ(std::string(kBlockSizeBytes - 256, 'a'),
- std::string(reinterpret_cast<const char*>(iovs[0].iov_base),
- iovs[0].iov_len));
+ IovecToStringPiece(iovs[0]));
}
TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionsWithinOneBlock) {
@@ -492,9 +496,7 @@
iovec iovs[2];
int iov_count = buffer_->GetReadableRegions(iovs, 2);
EXPECT_EQ(1, iov_count);
- EXPECT_EQ(std::string(1024 - 256, 'a'),
- std::string(reinterpret_cast<const char*>(iovs[0].iov_base),
- iovs[0].iov_len));
+ EXPECT_EQ(std::string(1024 - 256, 'a'), IovecToStringPiece(iovs[0]));
}
TEST_F(QuicStreamSequencerBufferTest,
@@ -536,9 +538,7 @@
EXPECT_EQ(4, buffer_->GetReadableRegions(iovs1, 5));
EXPECT_EQ(0.5 * kBlockSizeBytes, iovs1[2].iov_len);
EXPECT_EQ(512u, iovs1[3].iov_len);
- EXPECT_EQ(std::string(512, 'b'),
- std::string(reinterpret_cast<const char*>(iovs1[3].iov_base),
- iovs1[3].iov_len));
+ EXPECT_EQ(std::string(512, 'b'), IovecToStringPiece(iovs1[3]));
}
TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionEmpty) {
@@ -567,9 +567,7 @@
// Get readable region from [256, 1024)
iovec iov;
EXPECT_TRUE(buffer_->GetReadableRegion(&iov));
- EXPECT_EQ(
- std::string(kBlockSizeBytes - 256, 'a'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(kBlockSizeBytes - 256, 'a'), IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionTillGap) {
@@ -581,9 +579,8 @@
// Get readable region from [256, 1023)
iovec iov;
EXPECT_TRUE(buffer_->GetReadableRegion(&iov));
- EXPECT_EQ(
- std::string(kBlockSizeBytes - 1 - 256, 'a'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(kBlockSizeBytes - 1 - 256, 'a'),
+ IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, PrefetchEmptyBuffer) {
@@ -596,8 +593,7 @@
buffer_->OnStreamData(0, source, &written_, &error_details_);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source, IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, PrefetchBufferWithOffset) {
@@ -605,14 +601,12 @@
buffer_->OnStreamData(0, source, &written_, &error_details_);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source, IovecToStringPiece(iov));
// The second frame goes into the same bucket.
std::string source2(800, 'a');
buffer_->OnStreamData(1024, source2, &written_, &error_details_);
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source2, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source2, IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, PrefetchBufferWithMultipleBucket) {
@@ -621,18 +615,14 @@
buffer_->OnStreamData(0, source, &written_, &error_details_);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source, IovecToStringPiece(iov));
std::string source2(kBlockSizeBytes, 'b');
buffer_->OnStreamData(data_size, source2, &written_, &error_details_);
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(
- std::string(kBlockSizeBytes - data_size, 'b'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(kBlockSizeBytes - data_size, 'b'),
+ IovecToStringPiece(iov));
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(
- std::string(data_size, 'b'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(data_size, 'b'), IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, PrefetchBufferAfterBlockRetired) {
@@ -640,8 +630,7 @@
buffer_->OnStreamData(0, source, &written_, &error_details_);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source, IovecToStringPiece(iov));
// Read the whole block so it's retired.
char dest[kBlockSizeBytes];
helper_->Read(dest, kBlockSizeBytes);
@@ -650,8 +639,7 @@
buffer_->OnStreamData(kBlockSizeBytes, source2, &written_, &error_details_);
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source2, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source2, IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, PrefetchContinously) {
@@ -659,13 +647,11 @@
buffer_->OnStreamData(0, source, &written_, &error_details_);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source, IovecToStringPiece(iov));
std::string source2(kBlockSizeBytes, 'b');
buffer_->OnStreamData(kBlockSizeBytes, source2, &written_, &error_details_);
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(source2, std::string(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(source2, IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, ConsumeMoreThanPrefetch) {
@@ -675,16 +661,12 @@
helper_->Read(dest, 30);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(
- std::string(70, 'a'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(70, 'a'), IovecToStringPiece(iov));
std::string source2(100, 'b');
buffer_->OnStreamData(100, source2, &written_, &error_details_);
buffer_->MarkConsumed(100);
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(
- std::string(70, 'b'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(70, 'b'), IovecToStringPiece(iov));
}
TEST_F(QuicStreamSequencerBufferTest, PrefetchMoreThanBufferHas) {
@@ -692,9 +674,7 @@
buffer_->OnStreamData(0, source, &written_, &error_details_);
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(
- std::string(100, 'a'),
- std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+ EXPECT_EQ(std::string(100, 'a'), IovecToStringPiece(iov));
EXPECT_FALSE(buffer_->PrefetchNextRegion(&iov));
}
@@ -1052,8 +1032,7 @@
// Prefetch all buffered data.
iovec iov;
EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
- EXPECT_EQ(kData, QuicStringPiece(reinterpret_cast<const char*>(iov.iov_base),
- iov.iov_len));
+ EXPECT_EQ(kData, IovecToStringPiece(iov));
// No more data to prefetch.
EXPECT_FALSE(buffer_->PrefetchNextRegion(&iov));