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());