Internal QUICHE change
PiperOrigin-RevId: 319294627
Change-Id: Ib05a6027c6a7dcea0cd81804e96c9b6e3ab31002
diff --git a/quic/core/batch_writer/quic_batch_writer_base.cc b/quic/core/batch_writer/quic_batch_writer_base.cc
index 46e230c..51b6188 100644
--- a/quic/core/batch_writer/quic_batch_writer_base.cc
+++ b/quic/core/batch_writer/quic_batch_writer_base.cc
@@ -66,9 +66,9 @@
ReleaseTime result{actual_release_time,
QuicTime::Delta::FromMicroseconds(offset_ns / 1000)};
- QUIC_DLOG(INFO) << "ideal_release_time:" << ideal_release_time
- << ", actual_release_time:" << actual_release_time
- << ", offset:" << result.release_time_offset;
+ QUIC_DVLOG(1) << "ideal_release_time:" << ideal_release_time
+ << ", actual_release_time:" << actual_release_time
+ << ", offset:" << result.release_time_offset;
return result;
}
diff --git a/quic/core/batch_writer/quic_gso_batch_writer.cc b/quic/core/batch_writer/quic_gso_batch_writer.cc
index 56c0e10..fd023ae 100644
--- a/quic/core/batch_writer/quic_gso_batch_writer.cc
+++ b/quic/core/batch_writer/quic_gso_batch_writer.cc
@@ -66,18 +66,23 @@
// [2] It won't cause this batch to exceed kMaxGsoPacketSize.
// [3] Already buffered writes all have the same length.
// [4] Length of already buffered writes must >= length of the new write.
- // [5] The new packet has the same release time as buffered writes.
+ // [5] The new packet can be released without delay, or it has the same
+ // release time as buffered writes.
const BufferedWrite& first = buffered_writes().front();
const BufferedWrite& last = buffered_writes().back();
+ // Whether this packet can be sent without delay, regardless of release time.
+ const bool can_burst = !SupportsReleaseTime() || !options ||
+ options->release_time_delay.IsZero() ||
+ options->allow_burst;
size_t max_segments = MaxSegments(first.buf_len);
bool can_batch =
- buffered_writes().size() < max_segments && // [0]
- last.self_address == self_address && // [1]
- last.peer_address == peer_address && // [1]
- batch_buffer().SizeInUse() + buf_len <= kMaxGsoPacketSize && // [2]
- first.buf_len == last.buf_len && // [3]
- first.buf_len >= buf_len && // [4]
- (!SupportsReleaseTime() || first.release_time == release_time); // [5]
+ buffered_writes().size() < max_segments && // [0]
+ last.self_address == self_address && // [1]
+ last.peer_address == peer_address && // [1]
+ batch_buffer().SizeInUse() + buf_len <= kMaxGsoPacketSize && // [2]
+ first.buf_len == last.buf_len && // [3]
+ first.buf_len >= buf_len && // [4]
+ (can_burst || first.release_time == release_time); // [5]
// A flush is required if any of the following is true:
// [a] The new write can't be batched.
diff --git a/quic/core/batch_writer/quic_gso_batch_writer_test.cc b/quic/core/batch_writer/quic_gso_batch_writer_test.cc
index 158783d..d202c67 100644
--- a/quic/core/batch_writer/quic_gso_batch_writer_test.cc
+++ b/quic/core/batch_writer/quic_gso_batch_writer_test.cc
@@ -249,25 +249,27 @@
for (size_t j = 0; j < test_data_table.size(); ++j) {
const BatchCriteriaTestData& test_data = test_data_table[j];
SCOPED_TRACE(testing::Message() << "i=" << i << ", j=" << j);
+ TestPerPacketOptions options;
+ options.release_time_delay = QuicTime::Delta::FromMicroseconds(
+ test_data.buffered_write.release_time);
TestQuicGsoBatchWriter::CanBatchResult result = writer->CanBatch(
test_data.buffered_write.buffer, test_data.buffered_write.buf_len,
test_data.buffered_write.self_address,
- test_data.buffered_write.peer_address,
- /*options=*/nullptr, test_data.buffered_write.release_time);
+ test_data.buffered_write.peer_address, &options,
+ test_data.buffered_write.release_time);
ASSERT_EQ(test_data.can_batch, result.can_batch);
ASSERT_EQ(test_data.must_flush, result.must_flush);
if (result.can_batch) {
- ASSERT_TRUE(
- writer->batch_buffer()
- .PushBufferedWrite(test_data.buffered_write.buffer,
- test_data.buffered_write.buf_len,
- test_data.buffered_write.self_address,
- test_data.buffered_write.peer_address,
- /*options=*/nullptr,
- test_data.buffered_write.release_time)
- .succeeded);
+ ASSERT_TRUE(writer->batch_buffer()
+ .PushBufferedWrite(
+ test_data.buffered_write.buffer,
+ test_data.buffered_write.buf_len,
+ test_data.buffered_write.self_address,
+ test_data.buffered_write.peer_address, &options,
+ test_data.buffered_write.release_time)
+ .succeeded);
}
}
}
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 8c395a5..a979139 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -2737,8 +2737,6 @@
if (result.status == WRITE_STATUS_OK) {
// packet_send_time is the ideal send time, if allow_burst is true, writer
// may have sent it earlier than that.
- DCHECK((per_packet_options_ && per_packet_options_->allow_burst) ||
- result.send_time_offset.IsZero());
packet_send_time = packet_send_time + result.send_time_offset;
}