Refactor QuicStream::WriteBufferedData by moving the logic to calculate send window size into its own function. PiperOrigin-RevId: 580523729
diff --git a/quiche/quic/core/quic_stream.cc b/quiche/quic/core/quic_stream.cc index 3f8fbe0..8bdf9d0 100644 --- a/quiche/quic/core/quic_stream.cc +++ b/quiche/quic/core/quic_stream.cc
@@ -1211,20 +1211,11 @@ bool fin = fin_buffered_; + QUIC_BUG_IF(quic_bug_10586_13, !flow_controller_.has_value()) + << ENDPOINT << "WriteBufferedData called on stream without flow control"; + // How much data flow control permits to be written. - QuicByteCount send_window; - if (flow_controller_.has_value()) { - send_window = flow_controller_->SendWindowSize(); - } else { - send_window = std::numeric_limits<QuicByteCount>::max(); - QUIC_BUG(quic_bug_10586_13) - << ENDPOINT - << "WriteBufferedData called on stream without flow control"; - } - if (stream_contributes_to_connection_flow_control_) { - send_window = - std::min(send_window, connection_flow_controller_->SendWindowSize()); - } + QuicByteCount send_window = CalculateSendWindowSize(); if (send_window == 0 && !fin_with_zero_data) { // Quick return if nothing can be sent. @@ -1431,4 +1422,18 @@ sequencer()->SetUnblocked(); } +QuicByteCount QuicStream::CalculateSendWindowSize() const { + QuicByteCount send_window; + if (flow_controller_.has_value()) { + send_window = flow_controller_->SendWindowSize(); + } else { + send_window = std::numeric_limits<QuicByteCount>::max(); + } + if (stream_contributes_to_connection_flow_control_) { + send_window = + std::min(send_window, connection_flow_controller_->SendWindowSize()); + } + return send_window; +} + } // namespace quic
diff --git a/quiche/quic/core/quic_stream.h b/quiche/quic/core/quic_stream.h index 42f1775..f5c7d8a 100644 --- a/quiche/quic/core/quic_stream.h +++ b/quiche/quic/core/quic_stream.h
@@ -497,6 +497,10 @@ // Write buffered data (in send buffer) at |level|. void WriteBufferedData(EncryptionLevel level); + // Returns the min of stream level flow control window size and connection + // level flow control window size. + QuicByteCount CalculateSendWindowSize() const; + // Called when bytes are sent to the peer. void AddBytesSent(QuicByteCount bytes);