Renames the constant representing the HTTP/2 initial flow control window size, and uses it more consistently. PiperOrigin-RevId: 378700167
diff --git a/http2/adapter/http2_protocol.h b/http2/adapter/http2_protocol.h index 1e1dd39..faefae7 100644 --- a/http2/adapter/http2_protocol.h +++ b/http2/adapter/http2_protocol.h
@@ -50,9 +50,9 @@ // 7540 Section 6.5.2 (SETTINGS_MAX_FRAME_SIZE). const int kDefaultFramePayloadSizeLimit = 16 * 1024; -// The default value for the initial stream flow control window size, according -// to RFC 7540 Section 6.9.2. -const int kDefaultInitialStreamWindowSize = 64 * 1024 - 1; +// The default value for the initial stream and connection flow control window +// size, according to RFC 7540 Section 6.9.2. +const int kInitialFlowControlWindowSize = 64 * 1024 - 1; // The pseudo-header fields as specified in RFC 7540 Section 8.1.2.3 (request) // and Section 8.1.2.4 (response).
diff --git a/http2/adapter/nghttp2_adapter_test.cc b/http2/adapter/nghttp2_adapter_test.cc index 070ed68..38f2301 100644 --- a/http2/adapter/nghttp2_adapter_test.cc +++ b/http2/adapter/nghttp2_adapter_test.cc
@@ -85,7 +85,7 @@ EXPECT_EQ(initial_frames.size(), initial_result); EXPECT_EQ(adapter->GetPeerConnectionWindow(), - kDefaultInitialStreamWindowSize + 1000); + kInitialFlowControlWindowSize + 1000); // Some bytes should have been serialized. adapter->Send(); EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS, @@ -498,7 +498,7 @@ EXPECT_EQ(3, adapter->GetHighestReceivedStreamId()); EXPECT_EQ(adapter->GetPeerConnectionWindow(), - kDefaultInitialStreamWindowSize + 1000); + kInitialFlowControlWindowSize + 1000); EXPECT_TRUE(adapter->session().want_write()); // Some bytes should have been serialized.
diff --git a/http2/adapter/nghttp2_session_test.cc b/http2/adapter/nghttp2_session_test.cc index 5e0fd23..4973b3b 100644 --- a/http2/adapter/nghttp2_session_test.cc +++ b/http2/adapter/nghttp2_session_test.cc
@@ -48,7 +48,7 @@ CreateOptions(), &visitor_); EXPECT_TRUE(session.want_read()); EXPECT_FALSE(session.want_write()); - EXPECT_EQ(session.GetRemoteWindowSize(), kDefaultInitialStreamWindowSize); + EXPECT_EQ(session.GetRemoteWindowSize(), kInitialFlowControlWindowSize); EXPECT_NE(session.raw_ptr(), nullptr); } @@ -80,7 +80,7 @@ EXPECT_EQ(initial_frames.size(), initial_result); EXPECT_EQ(session.GetRemoteWindowSize(), - kDefaultInitialStreamWindowSize + 1000); + kInitialFlowControlWindowSize + 1000); ASSERT_EQ(0, nghttp2_session_send(session.raw_ptr())); // Some bytes should have been serialized. absl::string_view serialized = visitor_.data(); @@ -195,7 +195,7 @@ CreateOptions(), &visitor_); EXPECT_TRUE(session.want_read()); EXPECT_FALSE(session.want_write()); - EXPECT_EQ(session.GetRemoteWindowSize(), kDefaultInitialStreamWindowSize); + EXPECT_EQ(session.GetRemoteWindowSize(), kInitialFlowControlWindowSize); EXPECT_NE(session.raw_ptr(), nullptr); } @@ -265,7 +265,7 @@ EXPECT_EQ(frames.size(), result); EXPECT_EQ(session.GetRemoteWindowSize(), - kDefaultInitialStreamWindowSize + 1000); + kInitialFlowControlWindowSize + 1000); EXPECT_TRUE(session.want_write()); ASSERT_EQ(0, nghttp2_session_send(session.raw_ptr()));
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc index 073bf1c..5927914 100644 --- a/http2/adapter/oghttp2_session.cc +++ b/http2/adapter/oghttp2_session.cc
@@ -133,7 +133,7 @@ bool continue_writing = SendQueuedFrames(); // Wake streams for writes. while (continue_writing && write_scheduler_.HasReadyStreams() && - peer_window_ > 0) { + connection_send_window_ > 0) { const Http2StreamId stream_id = write_scheduler_.PopNextReadyStream(); // TODO(birenroy): Add a return value to indicate write blockage, so streams // aren't woken unnecessarily. @@ -190,8 +190,8 @@ } bool source_can_produce = true; bool connection_can_write = true; - int32_t available_window = - std::min(std::min(peer_window_, state.send_window), max_frame_payload_); + int32_t available_window = std::min( + std::min(connection_send_window_, state.send_window), max_frame_payload_); while (available_window > 0 && state.outbound_body != nullptr) { auto [length, end_data] = state.outbound_body->SelectPayloadLength(available_window); @@ -215,10 +215,11 @@ connection_can_write = false; break; } - peer_window_ -= length; + connection_send_window_ -= length; state.send_window -= length; available_window = - std::min(std::min(peer_window_, state.send_window), max_frame_payload_); + std::min(std::min(connection_send_window_, state.send_window), + max_frame_payload_); if (end_data) { bool sent_trailers = false; if (state.trailers != nullptr) { @@ -472,7 +473,7 @@ void OgHttp2Session::OnWindowUpdate(spdy::SpdyStreamId stream_id, int delta_window_size) { if (stream_id == 0) { - peer_window_ += delta_window_size; + connection_send_window_ += delta_window_size; } else { auto it = stream_map_.find(stream_id); if (it == stream_map_.end()) {
diff --git a/http2/adapter/oghttp2_session.h b/http2/adapter/oghttp2_session.h index 329d2a9..e2ab3fd 100644 --- a/http2/adapter/oghttp2_session.h +++ b/http2/adapter/oghttp2_session.h
@@ -65,9 +65,7 @@ return !frames_.empty() || !serialized_prefix_.empty() || write_scheduler_.HasReadyStreams(); } - int GetRemoteWindowSize() const override { - return peer_window_; - } + int GetRemoteWindowSize() const override { return connection_send_window_; } // From SpdyFramerVisitorInterface void OnError(http2::Http2DecoderAdapter::SpdyFramerError error, @@ -135,7 +133,7 @@ DataFrameSource* outbound_body = nullptr; std::unique_ptr<spdy::SpdyHeaderBlock> trailers; void* user_data = nullptr; - int32_t send_window = 65535; + int32_t send_window = kInitialFlowControlWindowSize; bool half_closed_local = false; bool half_closed_remote = false; }; @@ -203,8 +201,9 @@ Http2StreamId next_stream_id_ = 1; Http2StreamId highest_received_stream_id_ = 0; - int peer_window_ = 65535; - int stream_receive_window_limit_ = 65535; + int connection_send_window_ = kInitialFlowControlWindowSize; + // The initial flow control receive window size for any newly created streams. + int stream_receive_window_limit_ = kInitialFlowControlWindowSize; int max_frame_payload_ = 16384; Options options_; bool received_goaway_ = false;
diff --git a/http2/adapter/oghttp2_session_test.cc b/http2/adapter/oghttp2_session_test.cc index ca0b0f6..3869db1 100644 --- a/http2/adapter/oghttp2_session_test.cc +++ b/http2/adapter/oghttp2_session_test.cc
@@ -33,7 +33,7 @@ visitor, OgHttp2Session::Options{.perspective = Perspective::kClient}); EXPECT_TRUE(session.want_read()); EXPECT_FALSE(session.want_write()); - EXPECT_EQ(session.GetRemoteWindowSize(), kDefaultInitialStreamWindowSize); + EXPECT_EQ(session.GetRemoteWindowSize(), kInitialFlowControlWindowSize); EXPECT_FALSE(session.IsServerSession()); EXPECT_EQ(0, session.GetHighestReceivedStreamId()); } @@ -64,7 +64,7 @@ EXPECT_EQ(initial_frames.size(), initial_result); EXPECT_EQ(session.GetRemoteWindowSize(), - kDefaultInitialStreamWindowSize + 1000); + kInitialFlowControlWindowSize + 1000); EXPECT_EQ(0, session.GetHighestReceivedStreamId()); // Should OgHttp2Session require that streams 1 and 3 have been created? @@ -326,7 +326,7 @@ visitor, OgHttp2Session::Options{.perspective = Perspective::kServer}); EXPECT_TRUE(session.want_read()); EXPECT_FALSE(session.want_write()); - EXPECT_EQ(session.GetRemoteWindowSize(), kDefaultInitialStreamWindowSize); + EXPECT_EQ(session.GetRemoteWindowSize(), kInitialFlowControlWindowSize); EXPECT_TRUE(session.IsServerSession()); EXPECT_EQ(0, session.GetHighestReceivedStreamId()); } @@ -411,7 +411,7 @@ EXPECT_EQ(kSentinel3, session.GetStreamUserData(3)); EXPECT_EQ(session.GetRemoteWindowSize(), - kDefaultInitialStreamWindowSize + 1000); + kInitialFlowControlWindowSize + 1000); EXPECT_EQ(3, session.GetHighestReceivedStreamId()); EXPECT_TRUE(session.want_write());