Notify quicconnectionvisitorinterface when forward progress is made after path degrading. No flag protection, no-op in the shared code. Chromium QuicChromiumClientSession will override OnForwardProgressMadeAfterPathDegrading to handle differently. PiperOrigin-RevId: 315999536 Change-Id: Ibc7ac1ca4c8a38cba29b67f5bd366b29d9d85df3
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc index 7b59c2f..abd0f22 100644 --- a/quic/core/quic_connection.cc +++ b/quic/core/quic_connection.cc
@@ -4359,7 +4359,10 @@ } void QuicConnection::OnForwardProgressMade() { - is_path_degrading_ = false; + if (is_path_degrading_) { + visitor_->OnForwardProgressMadeAfterPathDegrading(); + is_path_degrading_ = false; + } if (sent_packet_manager_.HasInFlightPackets()) { // Restart detections if forward progress has been made. blackhole_detector_.RestartDetection(GetPathDegradingDeadline(),
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h index 5683c8b..d43093c 100644 --- a/quic/core/quic_connection.h +++ b/quic/core/quic_connection.h
@@ -146,6 +146,9 @@ // Called when the peer seems unreachable over the current path. virtual void OnPathDegrading() = 0; + // Called when forward progress made after path degrading. + virtual void OnForwardProgressMadeAfterPathDegrading() = 0; + // Called when the connection sends ack after // max_consecutive_num_packets_with_no_retransmittable_frames_ consecutive not // retransmittable packets sent. To instigate an ack from peer, a
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc index 25f9abd..a245316 100644 --- a/quic/core/quic_connection_test.cc +++ b/quic/core/quic_connection_test.cc
@@ -8204,6 +8204,7 @@ // degrading. And will set a timer to detect new path degrading. clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); + EXPECT_CALL(visitor_, OnForwardProgressMadeAfterPathDegrading()).Times(1); frame = InitAckFrame({{QuicPacketNumber(2), QuicPacketNumber(3)}}); ProcessAckPacket(&frame); EXPECT_FALSE(connection_.IsPathDegrading());
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc index dcf4962..5043f1f 100644 --- a/quic/core/quic_session.cc +++ b/quic/core/quic_session.cc
@@ -438,6 +438,8 @@ void QuicSession::OnPathDegrading() {} +void QuicSession::OnForwardProgressMadeAfterPathDegrading() {} + bool QuicSession::AllowSelfAddressChange() const { return false; }
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h index 09b3c17..e1e5188 100644 --- a/quic/core/quic_session.h +++ b/quic/core/quic_session.h
@@ -122,6 +122,7 @@ void SendPing() override; bool WillingAndAbleToWrite() const override; void OnPathDegrading() override; + void OnForwardProgressMadeAfterPathDegrading() override; bool AllowSelfAddressChange() const override; HandshakeState GetHandshakeState() const override; bool OnMaxStreamsFrame(const QuicMaxStreamsFrame& frame) override;