Remove max_streams_window_ in QuicStreamIdManager to make the code more readable.
There is no need to have a dedicated member variable to store the window value because the computation of window is really simple and only used in one place.
gfe-relnote: protected by gfe2_reloadable_flag_quic_enable_version_draft_25_v3
PiperOrigin-RevId: 305126280
Change-Id: Iee5f76af87dfe40c702ba74a6d21cdcc15ca2aa3
diff --git a/quic/core/quic_stream_id_manager.cc b/quic/core/quic_stream_id_manager.cc
index 469a692..533c89e 100644
--- a/quic/core/quic_stream_id_manager.cc
+++ b/quic/core/quic_stream_id_manager.cc
@@ -41,10 +41,7 @@
incoming_initial_max_open_streams_(max_allowed_incoming_streams),
incoming_stream_count_(0),
largest_peer_created_stream_id_(
- QuicUtils::GetInvalidStreamId(transport_version)),
- max_streams_window_(0) {
- CalculateIncomingMaxStreamsWindow();
-}
+ QuicUtils::GetInvalidStreamId(transport_version)) {}
QuicStreamIdManager::~QuicStreamIdManager() {}
@@ -100,12 +97,11 @@
incoming_actual_max_streams_ = max_open_streams;
incoming_advertised_max_streams_ = max_open_streams;
incoming_initial_max_open_streams_ = max_open_streams;
- CalculateIncomingMaxStreamsWindow();
}
void QuicStreamIdManager::MaybeSendMaxStreamsFrame() {
if ((incoming_advertised_max_streams_ - incoming_stream_count_) >
- max_streams_window_) {
+ (incoming_initial_max_open_streams_ / kMaxStreamsWindowDivisor)) {
// window too large, no advertisement
return;
}
@@ -252,11 +248,4 @@
return incoming_advertised_max_streams_ - incoming_stream_count_;
}
-void QuicStreamIdManager::CalculateIncomingMaxStreamsWindow() {
- max_streams_window_ = incoming_actual_max_streams_ / kMaxStreamsWindowDivisor;
- if (max_streams_window_ == 0) {
- max_streams_window_ = 1;
- }
-}
-
} // namespace quic
diff --git a/quic/core/quic_stream_id_manager.h b/quic/core/quic_stream_id_manager.h
index e396e64..e66bc22 100644
--- a/quic/core/quic_stream_id_manager.h
+++ b/quic/core/quic_stream_id_manager.h
@@ -58,7 +58,7 @@
", incoming_stream_count_: ", incoming_stream_count_,
", available_streams_.size(): ", available_streams_.size(),
", largest_peer_created_stream_id_: ", largest_peer_created_stream_id_,
- ", max_streams_window_: ", max_streams_window_, " }");
+ " }");
}
// Processes the STREAMS_BLOCKED frame. If error is encountered, populates
@@ -109,8 +109,6 @@
return incoming_initial_max_open_streams_;
}
- QuicStreamCount max_streams_window() const { return max_streams_window_; }
-
QuicStreamId next_outgoing_stream_id() const {
return next_outgoing_stream_id_;
}
@@ -156,8 +154,6 @@
QuicStreamId GetFirstOutgoingStreamId() const;
QuicStreamId GetFirstIncomingStreamId() const;
- void CalculateIncomingMaxStreamsWindow();
-
// Back reference to the session containing this Stream ID Manager.
// needed to access various session methods, such as perspective()
DelegateInterface* delegate_;
@@ -206,14 +202,6 @@
QuicUnorderedSet<QuicStreamId> available_streams_;
QuicStreamId largest_peer_created_stream_id_;
-
- // When incoming streams close the local node sends MAX_STREAMS frames. It
- // does so only when the peer can open fewer than |max_stream_id_window_|
- // streams. That is, when |incoming_actual_max_streams_| -
- // |incoming_advertised_max_streams_| is less than the window.
- // max_streams_window_ is set to 1/2 of the initial number of incoming streams
- // that are allowed (as set in the constructor).
- QuicStreamId max_streams_window_;
};
} // namespace quic
diff --git a/quic/core/quic_stream_id_manager_test.cc b/quic/core/quic_stream_id_manager_test.cc
index 81198f8..1062412 100644
--- a/quic/core/quic_stream_id_manager_test.cc
+++ b/quic/core/quic_stream_id_manager_test.cc
@@ -115,11 +115,6 @@
stream_id_manager_.incoming_advertised_max_streams());
EXPECT_EQ(kDefaultMaxStreamsPerConnection,
stream_id_manager_.incoming_initial_max_open_streams());
-
- // The window for advertising updates to the MAX STREAM ID is half the number
- // of streams allowed.
- EXPECT_EQ(kDefaultMaxStreamsPerConnection / 2,
- stream_id_manager_.max_streams_window());
}
// This test checks that the stream advertisement window is set to 1
@@ -128,7 +123,6 @@
stream_id_manager_.SetMaxOpenIncomingStreams(1);
EXPECT_EQ(1u, stream_id_manager_.incoming_initial_max_open_streams());
EXPECT_EQ(1u, stream_id_manager_.incoming_actual_max_streams());
- EXPECT_EQ(1u, stream_id_manager_.max_streams_window());
}
TEST_P(QuicStreamIdManagerTest, CheckMaxStreamsBadValuesOverMaxFailsOutgoing) {
@@ -326,15 +320,11 @@
}
TEST_P(QuicStreamIdManagerTest, MaxStreamsWindow) {
- // Test that a MAX_STREAMS frame is generated when the peer has less than
- // |max_streams_window_| streams left that it can initiate.
-
- // First, open, and then close, max_streams_window_ streams. This will
- // max_streams_window_ streams available for the peer -- no MAX_STREAMS
- // should be sent. The -1 is because the check in
- // QuicStreamIdManager::MaybeSendMaxStreamsFrame sends a MAX_STREAMS if the
- // number of available streams at the peer is <= |max_streams_window_|
- int stream_count = stream_id_manager_.max_streams_window() - 1;
+ // Open and then close a number of streams to get close to the threshold of
+ // sending a MAX_STREAM_FRAME.
+ int stream_count = stream_id_manager_.incoming_initial_max_open_streams() /
+ kMaxStreamsWindowDivisor -
+ 1;
// Should not get a control-frame transmission since the peer should have
// "plenty" of stream IDs to use.
@@ -344,7 +334,8 @@
QuicStreamId stream_id = GetNthIncomingStreamId(0);
size_t old_available_incoming_streams =
stream_id_manager_.available_incoming_streams();
- while (stream_count) {
+ auto i = stream_count;
+ while (i) {
EXPECT_TRUE(stream_id_manager_.MaybeIncreaseLargestPeerStreamId(stream_id,
nullptr));
@@ -354,12 +345,11 @@
EXPECT_EQ(old_available_incoming_streams,
stream_id_manager_.available_incoming_streams());
- stream_count--;
+ i--;
stream_id += QuicUtils::StreamIdDelta(transport_version());
}
// Now close them, still should get no MAX_STREAMS
- stream_count = stream_id_manager_.max_streams_window();
stream_id = GetNthIncomingStreamId(0);
QuicStreamCount expected_actual_max =
stream_id_manager_.incoming_actual_max_streams();
@@ -420,18 +410,15 @@
stream_id_manager_.incoming_advertised_max_streams();
// Open/close enough streams to shrink the window without causing a MAX
- // STREAMS to be generated. The window will open (and a MAX STREAMS generated)
- // when max_streams_window() stream IDs have been made available. The loop
+ // STREAMS to be generated. The loop
// will make that many stream IDs available, so the last CloseStream should
-
// cause a MAX STREAMS frame to be generated.
- int i = static_cast<int>(stream_id_manager_.max_streams_window());
+ int i =
+ static_cast<int>(stream_id_manager_.incoming_initial_max_open_streams() /
+ kMaxStreamsWindowDivisor);
QuicStreamId id =
QuicStreamIdManagerPeer::GetFirstIncomingStreamId(&stream_id_manager_);
- EXPECT_CALL(
- delegate_,
- SendMaxStreams(first_advert + stream_id_manager_.max_streams_window(),
- IsUnidirectional()));
+ EXPECT_CALL(delegate_, SendMaxStreams(first_advert + i, IsUnidirectional()));
while (i) {
EXPECT_TRUE(
stream_id_manager_.MaybeIncreaseLargestPeerStreamId(id, nullptr));