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; }